《Linux Shell》之六:判断与循环
7.1 退出状态
退出状态为0表示命令运行成功,不为0表示命令运行失败。最后一次命令退出状态值被保存在"$?"中。
7.2 测试与判断
测试命令用于测试表达式真假,如果测试条件为真,返回0;否则返回非0。这一点跟C语言不一样。
[ expression ] ,请注意[]中[后面要有一个空格, ]前面要有一个空格。
在linux中,整数比较跟字符串比较是完全不一样的格式。
整数比较运算符:
整数比较运算符 | 描述 |
num1 -eq num2 | 如果num1等于num2,结果为0 |
num1 -ge num2 | 如果num1大于等于num2,结果为0 |
num1 -gt num2 | 如果num1大于num2,结果为0 |
num1 -le num2 | 如果num1小于等于num2,结果为0 |
num1 -lt num2 | 如果num1小于num2,结果为0 |
num1 -ne num2 | 如果num1不等于num2,结果为0 |
bash只能对整数使用比较运算符,如果是浮点数,需要使用特定的函数。
字符串运算符:
字符串运算符 | |
-n string | 测试字符串string是否不为空 |
-z string | 测试字符串是否为空 |
string1 = string2 | 测试字符串是否相等 |
string1 != string2 | 测试字符串是否不相等 |
字符串比较时建议字符串变量使用双引号,即使变量为空,同样也要使用双引号。
# [ -n "$str" ]
# [ "$str1" = "$str2" ]
在linux shell中,字符串赋值和整数赋值没有区别,所以在整数比较时注意不要使用字符串比较运算符。
7.2.4 文件操作符:
格式为: [ file_operator file ]
file_operator为文件操作符,file为文件名、目录名等。
几个典型的文件操作符:
文件操作符 | 描述 |
-d file | 测试file是否为目录 |
-e file | 测试file是否存在 |
-f file | 测试file是否为普通文件 |
-r file | 测试file是否可读 |
-w file | 测试file是否可写 |
-x file | 测试file是否可执行 |
-s file | 测试file的大小是否大于0 |
-L file | 测试file是否为符号链接 |
7.2.5 逻辑运算符:
! expression 非
exp1 -a exp2 与
exp1 -o exp2 或
# [ "$var" -ge 10 -a "$var" -le 100 ]
7.3.1 判断:
if expression; then
command;.....
elif expression; then
command;....
else
command;...
fi
case "$mouth" in
1)
echo "one";;
2)
echo "two";;
*)
echo "other";;
esac
7.3.2 exit 命令
# exit status
错误返回一个非0值,或保存在$?这个变量中去。
7.4.1 算术运算符
算术运算符包括:+、-、*、/、%、**(幂运算符)
整数做除法运算时候或舍弃小数部分,忽略四舍五入,最终结果为整数部分。
直接赋值的时候,shell默认都是字符串赋值,要想让它成为整数赋值,可使用let命令:
# let z=8/5*5
对于浮点数,需要使用专门的函数,这一点跟C语言是不一样的。
复合赋值: += -= *= /= %=
7.4.2 位运算符
<< 左移 >>右移 &按位与 |按位或 ~按位取反 ^按位异或
7.4.3 数字常量
默认shell是以10进制表示数字,如果想以其他进制,可使用0(8进制)或0x(16进制)作为前缀
或者可以使用num#作为前缀
比如:# let "num=2#10000111111001010"
for循环:
for i in {1..100..2}
do
let "sum+=i"
done
echo "sum=$sum"
上面的for循环也可以用seq来简写:
for i in $(seq 1 2 100)
do
let "sum+=i"
done
echo "sum=$sum"
-------
for file in $(ls)
do
echo "file:$file"
done
-------
for ((var=1; var<=5; var++))
do
echo "var=$var"
done
---------
#!/bin/bash signal=0 num=4 while (("$signal" != 2)) do if [ "$num" -gt 3 ]; then echo "goodman..." fi let "signal++" done
-------九九乘法表-----------
#!/bin/bash for ((i=1;i<=9;i++)) do for ((j=1;j<=i;j++)) do # let "temp = i * j" echo -n -e "$j*$i=$((i*j))\t" done echo "" done
select的用法:提供一个选择列表给用户区选择
#!/bin/bash echo "What is your favorite color?" select color in "red" "blue" "green" do break done echo "you have selected $color"
本人博客已搬家,新地址为:http://yidao620c.github.io/