目录
简单比较
与或非
if与for
if语句
for循环
增强for循环
各种例题:
打印水仙花数:
打印20以内的素数
酒桌游戏:敲七
在shell当中使用1代表true,0代表false
shell中使用字母表示各种判断
-gt:检测左边的数是否大于右边的数,若大于则返回true
对于大小的比较直接使用$[表达式]即可实现大小的比较,这里的格式若使用-gt则格式会错误
举例:
与:&;或:|;非:!
在程序中不允许两个条件一起书写,想要去写只能去一个个去写,中间使用与或非连接两个条件。
与字符举例:
只有当前后都为1时结果才是1
或字符举例:
只有前后两边都是0的时候结果才是0
非字符举例:
非字符实现的是反转功能,且反转的是紧跟后面的字符,若想反转一个整体,需要将后面反转的部分加上小括号
脚本的执行流程默认情况下是从上向下依次执行。
if语句使该执行流程变为多分支流程。
由于if的判断条件本身就是做一个判断,所以在判断条件中不需要加入$符计算表达式的结果,而是直接对表达式进行一个判断。
格式1:
if 判断条件
then
成立执行的代码
fi
举例:这里给出两种情况,一种大于,一种小于
通过结果发现:对于判断条件不成立的情况仍然输出了true
这是由于:使用[],需要每一块的内容都以空格分割,且默认不能识别符号
解决方法:将大于号加上转义字符即可
但这种方式写出的if语句中的判断条件的值不可以大于两位数。且不可以使用连续的符号例如>=,
所以这里若涉及到>=的话还是需要使用字母-ge来进行实现>=。
[]适用于以字母来表示判断条件,使用符号的局限性比较大
格式2:
if 判断条件
then
成立执行的代码
else
不成立执行的代码
fi
举例:
该结果说明:
[[]]方式可以识别符号,每一块之间需要使用空格分割,但仍然不可以使用连续符号,且值也不能大于两位数,同时可以使用字母来代替符号使用。
总结:
只要使用中括号判断条件,直接使用字母进行判断(不需要考虑注意事项),如果使用符号,注意事项比较多。
剩下判断条件还有两种方式:()和(())
这里直接说明(()),因为()已经被弃用
举例:
结果说明:
(())可以直接使用符号,不需要考虑任何问题,也可以直接引用变量,但不可以使用字母。
这里引出:[]不可以直接引用变量,但[[]]可以直接引用变量。
举例:男女跑步成绩,使用到if的嵌套
输出:
Shell中若想使用中文比较,需要使用双中括号的格式去判断,且使用符号==即可实现中文的比较
格式3:
if 判断条件
then
为true的代码
elif 判断条件
then
为true的代码
。。。
else(这个else可加可不加)
为false的代码
fi
举例:
考试成绩:0到59,加班学习;60到99,正常;100,休息三天
输出结果:
for循环格式:
for((定义变量;判断条件;控制语句))
do
循环的代码体
done
简单举例:
循环嵌套:输出i小时j分钟
输出:
举例:
使用for循环打印九九乘法表
输出:这其中引出不换行输出为:echo -n
格式:
for 变量 in 结果集
do
循环的代码体
done
结果集的格式:
格式1:{开始..结束}
格式2:`seq 开始 结束`
两种格式的区别:
格式1在使用变量时不会产生结果集,只会将大括号内的内容包括大括号当作一个整体成为一个字符串直接输出。
而格式2可以使用变量,不过需要引用变量,不可直接使用,可以产生结果集。
举例:
输出:
举例:输出奇数和偶数的和
这里若是不使用$符计算结果,可以使用字母let来进行计算结果
输出:
水仙花数:是指一个三位数的各个位上的三次方的和等于这个三位数,1000以内有四个水仙花数
输出:
素数:除了1和本身之外没有其他的因数
输出:
敲七:指的是依次按顺序说数,凡是遇到个位数或者十位数为7或者是7的倍数的数,全部改为敲桌子
输出:这里给出20以内的敲七数