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

你可能感兴趣的:(shell)