条件判断在流程控制中的重要性
有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。
单分支流程判断
如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令,这种一次性执行多条命令的格式与使用管道符来操作还不一样,
使用管道符来操作多条命令的话,每一条命令都需要去执行,但是如果使用分支语句和英文逗号的话,并不一定每一条命令都需要去执行。
单分支语句的执行顺序如上图所示,如果条件为真的话,就执行下面一条语句,如果条件为假的话,就跳过需要执行的语句,执行下一条语句。
如上图所示,先执行cd /home/atguigu/ 再执行ls -l
这样的操作形式常用于if [ 需要判断的条件语句 ] ; then echo OK ; fi
即如果 [ 需要判断的条件语句 ]为真的话,就去执行then与fi之间的语句,如果 [ 需要判断的条件语句 ]为假的话,就跳过then 与fi之间的语句,去执行下一条语句。
这样if [ 需要判断的条件语句 ] ; then 条件为真的时候执行的语句; fi 的语句,即每一条命令并不是一定要去执行。
如上图所示,当我们在脚本中编写分支语句的时候,就需要使用字符串的一个拼接的操作,
因为在实际调用脚本的时候可能要传入的参数为空,这时因为向表达式中传入的参数为空就会报错,所以要进行如上图的·字符串的拼接的操作。
如上图所示,在编写脚本之后,记得使用chmod +x 脚本名称,给脚本加上可执行的权限,当然这里不指定属主,属组,其他用户的话,就默认给全部用户加上对此文件的可执行权限。
如上图所示,是将分支语句跟逻辑与和逻辑或结合起来的语句操作。
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK;fi
如上图所示,if [ $a -gt 18 ] && [ $a -lt 35 ]; 条件为真的话,就执行then 之间的语句 fi
如果条件为假,就不进行输出打印的操作。
if [ $a -gt 18 -a $a -lt 35 ];表示判断这个参数的数值是否在[ $a -gt 18 -a $a -lt 35 ]区间内,如果在这个区间内就打印OK,如果不在这个区间内就不进行打印输出的操作,
if [ $a -gt 18 -o $a -lt 35 ];表示这个参数的数值满足上述两个条件就可以,就继续执行之后的then fi 语句,
多分支流程判断
如上图所示,是一个多分支语句示例和一个单分支语句示例,在单分支中必须保证中括号中的不能为空,不然报错,即使不传入参数,也应该保证中括号内有字符,
在多分支语句中,
if [ $2 -lt 18 ]
then
echo "未成年人"
else
echo "成年人"
fi
如上所示,如果if中的条件为真的话,就执行then 语句一 否则的话就执行 else 语句二 fi
如上图所示,这是一个调用可执行脚本中的多分支语句的示例。
如上图所示,是一个多分支语句,
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then
程序
else
程序
fi
如上图所示,
if [ $2 - lt 18 ]
then
echo "未成年人"
elif [ $2 -lt 35 ]
then
echo "青年人"
elif [ $2 -lt 60 ]
then
echo "中年人"
else
echo "老年人"
fi
如上图所示,在shell编程中的分支语句中每一个执行语句都需要使用then作为一个前提。
shell编程中的case语句
如上图所示,*)之后的语句表示default语句,即默认语句。
如上图所示,这是在shell编程中实际应用case语句的一个案例,
当输入脚本的参数是1时执行语句1,当输入脚本的参数是2时执行语句2,当输入脚本的参数是3时执行语句3,
当输入脚本的参数是意外情况时,就执行default语句,
shell编程中的for循环
对于for循环来说如果想进入for循环中就必须要使用一个条件判断,当条件判断为真时就进入循环,当条件判断为假时就不进入循环。
for循环中((初始值;循环控制条件;变量变化))
do
程序
done
如上图所示,这是一个for循环示例,当在使用变量的时候必须要在变量的前面加上一个$f的符号,
即sum=$sum + $i但是此时在shell中加法是不能够直接去运用的必须要将这个加和的操作放在中括号内部。
可以在脚本的内部再加上一句echo $sum这样的语句,对最后的结果进行打印输出。
如上图所示,就是调用加和脚本并且对脚本传递参数的结果。
如上图所示,在shell编程中可以在双小括号中正常的使用一些数学上的符号。就不必使用那些复杂的-le这样的运算符了。
如上图所示,在shell编程中使用双小括号可以将数学上的符号正常使用,if ((表达式正确)); then 当表达式正确的时候需要执行语句 ; else 当表达式不正确的时候需要执行的语句。
如上图所示,是在shell中调用for循环的另外一种形式。
如上图所示,是对for循环的一个基本调用,
在shell中大括号的作用是表示一个序列,比如{1..100}这样的形式就表示1-100的序列。
如上图所示,是一个求和的for循环。
如上图所示,编写脚本赋予其执行权限,被引号引起来的\*和@的作用是不同的,而没有被引号引起来的\*和@的作用是相同的,都是将获取到的参数区分对待。
如上图所示,这是一个通过使用\*和@来接收参数从而实现for循环的一个案例。
shell编程中的while循环
如上图所示,与for循环不同的是,在shell编程的while循环中,我们需要在while循环外面进行变量的初始化,在do done之间进行变量的调整。
如上图所示,这是在使用for循环和while循环完成的1-100的加和,
首先在for循环中
for ((i=1; i <= $1; i++))
do
sum=$[ $sum + i \]//在shell编程中如果想让数学运算符正常生效的话,就需要使用[ ]如果想调用变量的话,就需要在变量名前面加上$的符号。
done
echo $sum
其次在while循环中
a=1
while [ $a -le $1 ]
do
sum2=$[ $sum2 + $a ]
a=$[ $a + 1 ]//对进入循环的变量的调整。
done
echo $sum2
如上图所示,这是一个实现1-100加和的while循环,
let sum2+=a
let a++
这样let的操作就可以将shell编程中一些比较反人类的运算符的操作,简化一些。
read读取控制台的输入(交互式操作)
如上图所示,这是在创建一个交互式的输入,read -t表示等待用户等待的时间,
-p表示指定读取值时的提示符(这里的提示符可以用引号括起来): 接收参数的变量
echo $变量 对变量的打印输出