Linux下shell常见语法(详细)总结附示例快速掌握

2025-07-24 15:14:58 世界杯2019

目录

一、简介二 、常见语法2.1 赋值2.2 打印2.3 if语句2.4 while语句2.5 for语句2.6 case语句2.7 运算2.8 注释2.8.1 单行注释2.8.2 多行注释 :<

2.9 shell脚本运行参数2.9 shell脚本函数及调用

三、其他相关链接1、shell基础知识-echo及单引号、反引号和双引号详解2、C语言、Makefile和shell中添加打印调试信息总结

一、简介

本文主要介绍shell中常用的一些语法,同时附示例方便读者快速掌握。

二 、常见语法

2.1 赋值

直接赋值

a='test' # 单引号定义字符串

b="test" # 双引号定义字符串

c=test # 也可以不加引号,同样表示字符串

d=123 #直接赋值数值

通过 $ 或者 ${} 使用,${}中的括号指定了变量的范围

name=teststr

echo $name

echo ${name}

echo ${name}big # 输出teststrbig

2.2 打印

# 直接使用echo

echo $(KBUILD_CFLAGS)

echo "this is test---------------\r\n"

# 打印内容显示红色

echo -e "\033[1;31m this is test--------------- \033[0m"

# -e 开启转义 \c 不换行

echo -e "Hi \c"

echo "body"

# 输出 Hi body

2.3 if语句

if语句一般是结合下面比较或者判断的条件,然后执行相应的命令 语法格式:

if ... then ... elif ... then... else ...

示例1:

if [ -z "$1"];then

if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ];then

echo "嵌套if语句"

fi

fi

示例2:

if ! [ "$a" -lt "$b" ]

then

echo ${a} <= ${b}

else

echo ${a} < ${b}

fi

文件类型判断

参数意义-e测试是否存在-f测试是否为文件-d测试是否为目录

整数比较

参数意义-eq等于-ne不等于-gt大于-lt小于-ge大于等于-le小于等于

字符串比较

参数意义-z STRING判断STRING是否为空,如果为空,则返回true-n STRING判断STRING是否非空,如果非空,则返回true(-n可以省略)str1 == str2判断str1是否等于str2str1 != str2判断str1是否不等于str2

多重判定条件

参数意义-a两条件是否同时成立-o两条件是否至少一个成立!取反。如 test ! -x file,当file不可执行时,返回true

2.4 while语句

while condition

do

语句1

语句2

...

done

示例:

while true

do

echo "this is test"

done

2.5 for语句

语法1:

for var in val1 val2 val3

do

语句1

语句2

...

done

语法2:

for ((expression; condition; expression))

do

语句1

语句2

done

示例1:

for file in `ls`

do

echo $file

done

示例2:

for i in {a..z}

do

echo $i

done

示例3:

for ((i=1; i<=100; i++))

do

echo "this is test :$i"

done

2.6 case语句

case $n in

"值1")

程序

;;

"值2")

程序

;;

*)

程序

;;

esac

case那行要以in结尾,;;代表一个条件的结束,*代表默认default

示例:

a=2

case $a in

1)

echo ${a} = 1

;;

2)

echo ${a} = 2

;;

3)

echo ${a} = 3

;;

*)

echo ${a} = 其他

;;

esac

2.7 运算

expr支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。

+ -

加减运算。两端参数会转换为整数,如果转换失败则报错。

* / %

乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。

() 可以改变优先级,但需要用反斜杠转义

a=3

b=4

echo `expr $a + $b` # 输出7

echo `expr $a - $b` # 输出-1

echo `expr $a \* $b` # 输出12,*需要转义

echo `expr $a / $b` # 输出0,整除

echo `expr $a % $b` # 输出3

echo `expr \( $a + 1 \) \* \( $b + 1 \)` # 输出20,值为(a + 1) * (b + 1)

其他加法方式:

count=$((count + 1))

let "count = 5 + 3"

2.8 注释

2.8.1 单行注释

在行首加上#符号

# 这是一个单行注释

echo "hello world!"

2.8.2 多行注释 :<

以:<

:<

这是一个多行注释

这是一个多行注释

这是一个多行注释

EOF

可以把EOF换成任意字符串,也可以删掉:不写

:<

这是一个多行注释

这是一个多行注释

这是一个多行注释

ccc

echo "hello world!"

<

这是一个多行注释

这是一个多行注释

这是一个多行注释

!

2.9 shell脚本运行参数

在执行shell脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推。特殊的,$0是文件名(包含路径)

创建文件test.sh:

#! /bash/bin

echo "文件名:"$0

echo "第一个参数:"$1

echo "第二个参数:"$2

echo "第三个参数:"$3

echo "第四个参数:"$4

使用以下命令

chmod +x test.sh

./test.sh 1 2 3 4

输出结果

文件名:./test.sh 第一个参数:1 第二个参数:2 第三个参数:3 第四个参数:4

其他相关变量

参数说明$#代表文件传入的参数个数,如上例中值为4$*由所有参数构成的用空格隔开的字符串,如上例中值为"$1 $2 $3 $4"$@每个参数分别用双引号括起来的字符串,如上例中值为"$1" “$2” “$3” “$4”$$脚本当前运行的进程ID$?上一条命令的退出状态(注意不是stdout,而是exit code)。0表示正常退出,其他值表示错误$(command)返回command这条命令的stdout(可嵌套)command 返回command这条命令的stdout(不可嵌套)

2.9 shell脚本函数及调用

基本语法:

function_name() {

# 函数体

# 你希望执行的命令

}

示例一:

定义一个函数,打印 hello world

hello_world() {

echo "Hello, World!"

}

//调用

hello_world

//输出

[root@localhost /]# Hello, World!

示例二:

# 定义函数,使用 echo 返回计算结果

sum() {

echo $(($1 + $2))

}

# 调用函数并获取结果

result=$(sum 5 10)

echo "The sum is $result"

[root@localhost /]# The sum is 15

三、其他相关链接

1、shell基础知识-echo及单引号、反引号和双引号详解

2、C语言、Makefile和shell中添加打印调试信息总结