shell中的判断语句和循环语句

if语句

if语句与其他语言中的类似,不过不需要大括号,在表达式后面需要添加个关键字then

a=10
b=20

if [ $a == $b ]
then
    echo "a is equal to b"
elif [ $a -gt $b ]
then
    echo "a is greater than b"
elif [ $a -lt $b ]
then
    echo "a is less than b"
else
    echo "I am just a soso"
fi


num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo 'The two numbers are equal!'
else
echo 'The two numbers are not equal!'
fi

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,之前的这三个运算符都可以

case...esac语句

case...esac语句,与其他语言中的switch...case语句类似,是一种多分支选择结构
case工作方式如下所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

echo 'Input a number between 1 to 4'
echo 'your number is:\c'
read aNum
case $aNum in
    1)
        echo 'you select 1'
    ;;
    2)
        echo 'you select 2'
    ;;
    3)
        echo 'you select 3'
    ;;
    4)
        echo 'you select 4'
    ;;
    *)
        echo 'you do no select a number between 1 to 4'
    ;;
esac

for循环

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

for str in 'This is a string'
do
    echo $str
done


for FILE in $HOME/.bash*
do
echo $FILE
done

while循环

i=10
while [ $i -ne 0 ]
do
    i=`expr $i - 1`
    echo $i
done

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

echo 'type  to terminate'
echo -n 'enter your most liked film:'
while read FILM
do
    echo "yeah!great film the $FILM"
done

until循环

a=0

until [ ! $a -lt 15 ]
do
echo $a
a=`expr $a + 1`
done

在shell中可以使用break和continue来跳出循环,与其他语言中用法类似,不同的一点是,break后面可以跟个数字,表示跳出第几层循环。

你可能感兴趣的:(shell中的判断语句和循环语句)