《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/

相关推荐