Bash基础(二)
主要内容:
- 逻辑判断:test关键字
- 选择结构:if-else, case
- 循环结构:while-do, for
逻辑判断
bash不仅可以进行数值运算,通过test关键字还可以进行逻辑判断。
数值大小的判断
例如判断3是否大于2的大小:
1 | test 3 -gt 2; echo $? |
1 | 0 |
注意:判断成立,返回0,不成立返回1。
参数 | 含义 | 助记 |
---|---|---|
-gt | 大于 | greater than |
-lt | 小于 | less than |
-eq | 等于 | equal |
-ne | 不等于 | not equal |
-ge | 大于等于 | greater equal |
-le | 小于等于 | less equal |
文本字符串的判断
例如判断两文本是否相等:
1 | test abc = abx; echo $? |
1 | 1 |
因为判断不成立,所以返回1。
另外注意:等号的两侧要有空格,否则就变成变量赋值了!
参数 | 含义 |
---|---|
= | 相等 |
!= | 不相等 |
> | 字典顺序大于 |
< | 字典顺序小于 |
文件的判断
例如判断文件是否存在:
1 | test -e a.out; echo $? |
参数 | 含义 | 助记 |
---|---|---|
-e | 文件存在 | exist |
-r | 文件存在&可读 | readable |
-w | 文件存在&可写 | writable |
-x | 文件存在&可执行 | executable |
-f | 文件存在&普通文件 | file |
-c | 文件存在&字符型特殊文件 | char |
-b | 文件存在&块型特殊文件 | block |
-d | 文件存在&为目录 | directory |
选择结构
if-else
类比C语言中的if else-if else
结构,注意结尾是fi,即if反过来写。
1 | if condition1 |
例如,demo_if.sh
内容如下:
1 |
|
case
类比C语言中的switch-case
结构,注意,break
被;;
取代,结尾是esac,即case反过来写。
1 | case 值 in |
例如,demo_case.sh
代码如下:
1 |
|
注意:文本标签除了是一串具体的文本,还可以包含通配符,如;
通配符 | 含义 | 文本标签的例子 | 通过的条件文本 |
---|---|---|---|
***** | 任意文本 | *) | Xyz, 123, … |
? | 任意一个字符 | a?c) | abc, axc, … |
[] | 范围内一个字符 | [1-5] [b-d]) | 2b, 3d, … |
循环结构
while
类比C语言中的while-do
结构,注意以done结尾。
例如demo_while.sh
代码如下(注意符号+
之前有一个空格!):
1 |
|
1 | 2019年 11月 11日 星期一 15:07:31 CST |
for
类比C语言中的for
结构,注意也是以done结尾。
例如demo_for.sh
代码如下:
1 |
|
该脚本的功能是查找本目录中以“log”开头的文件,并将其依次删除。
另外,结合seq关键字,可以控制循环次数,比如:
1 | seq 1 2 10 |
1 | 1 |
应用举例
- 高斯求和,计算1到100所有整数的加和:
1 |
|
1 | 5050 |
也可以用while-do结构:
1 |
|
- 计算1到100所有不被3整除的数的和,使用continue语句:
1 |
|
1 | 3367 |
-------------纸短情长 下次再见-------------
关注微信公众号,获取更多精彩~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 码农爱学习的博客!
评论