条件分支共有以下三种:
if [...]; then
expression
fi
如果存在多个判断条件时,可以使用||
,&&
表示与和非:
if [...] && [...]; then
expression
fi
这种方式表示:当条件满足时,进入if中执行,fi是if的反写,表示if结束。
格式表示如下:
if [...]; then
...
else
...
fi
这种方式表示:当条件满足时,进入if语句中,否则进入else语句中。
其格式如下:
if [condition1]; then
...
elif [condition2]; then
...
else
...
fi
这种方式表示:当满足条件1时进入if语句中执行,不再执行elif和else语句中的内容;如果不满足condition1,但满足condition2,则进入elif语句中执行;如果都不满足,则执行else语句中的内容。
比如,在以下脚本中,接收一个整数,并判断是否为奇数:
#!/bin/bash
#!/bin/bash
declare -i number
read -p "please enter a number:" number
if [ -n "$number" ]; then
echo "you enter nuber is $number"
if [ "$((number%2))" == 0 ]; then
echo "this number is oushu"
elif [ "$number" -gt 2 ]; then
echo "this nuber is biger than 2"
else
echo "this is a jishu"
fi
fi
还有一个比较经典的题目:分别有1,2,5分三种硬币,有几种方式能组合为1毛?
#!/bin/bash
times=0;
for ((i=0;i<=10;i++))
do
for((j=0;j<=5;j++))
do
for((k=0;k<=2;k++))
do
if [ $((i+2*j+5*k)) -eq 10 ];then
times=$(($times+1))
fi
done
done
done
echo "1,2,5组成1元,可以有"${times}" 种方式."
$(())用于整数运算.
case语句用于多重分支判断中,格式如下:
case $variable in
"case1")
.......
;;
"case2")
.......
;;
"case3")
......
;;
*)
......
;;
esac
以上格式总结如下:
)
结尾;*
表示默认模式,好比其他语言中的default
关键字,当不满足以上模式时,进入默认模式中去。esac
表示case的结尾;比如以下示例:
#!/bin/bash
read -p "Please enter a word,and let me tell you the animal:" word
case $word in
"p")
echo "p is PIG"
;;
"d")
echo "d is DOG"
;;
"c")
echo "c is CAT"
;;
*)
echo "uh~~~ i dont know what you mean."
;;
esac
while循环表示当条件成立时,就开始循环,条件不成立时结束循环,do...done
之间为循环体,其格式为:
while [condition]
do
...
done
如计算1-100的数的和:
#!/bin/bash
# 当i==100 时,不再循环
while [ "$i" != 100 ]
do
i=$(($i+1))
sum=$(($sum+$i))
done
echo "the 1+...+100 result is:$sum"
until循环恰恰和while循环相反,表示当条件成立时,就终止循环,同样地,do…done之间为循环体,其格式为:
until [ condition ]
do
...
done
用until来计算1-100的数的和:
#!/bin/bash
# 当 i==100时,终止循环
until [ "$i" == 100 ]
do
i=$(($i+1))
sum=$(($sum+$i))
done
echo "the result 1+...+100 is $sum"
while循环和until循环可以看做是不定循环,因为不确定他们的循环次数,那么for循环就可以看做是固定循环了,因为只会根据给定的循环条件进行循环,其格式有两种,分别如下:
for var in con1 con2 con3 ...
do
......
done
for (( 初始值;限制值;执行步长))
do
......
done
比如下面这个很简单的示例:
#!/bin/bash
for number in 1 2 3 4 5
do
echo "get $number"
done
或者可以这样:
#!/bin/bash
for ((i=0; i<10; i=i+1))
do
sum=$(($sum+i))
done
echo "the result of 1+...+10 is $sum "
通常无限循环有以下三种格式:
while :
型# :表示true
while :
do
......
done
while true
型while true
do
......
done
for ((;;))
型for ((;;))
跳出循环有两种方式: