[关闭]
@WillireamAngel 2018-06-17T07:39:41.000000Z 字数 2096 阅读 1565

Shell脚本判断与循环

Shell


条件测试与比较

条件测试

语法

  1. test <>
  2. [ <> ] #使用-a -o -gt -lt
  3. [[ <> ]] #使用&& || > <
  4. ((<>)) #常用于if

文件测试

-d 判断是否为文件
-f 是否为普通文件
-e 存在与否
-r 可读
-w
-x
-L 是否为链接文件
f1 -nt f2 较新
f1 -ot f2 较旧

if条件语句

Case条件语句

While和Until循环

一、循环简介

while:条件不成立时,终止循环

  1. while <options>
  2. do
  3. ...
  4. ...
  5. done

until:条件成立时,终止循环

  1. until <options>
  2. do
  3. ...
  4. ...
  5. done

二、Shell后台运行与进程管理

sleep
sleep:以秒为单位,休息;usleep:以微妙为单位,休息。

后台运行进程
主要方法:

  • ([command] [> output flie] [2>&1] &) #使用subshell实现进程后台运行
  • nohup option COMMAND [>filename] [2>&1]... & #忽略hup信号
  • setid #父进程切换为init
  • screen -r session name #重新连接指定会话,建立伪终端
  • disown -h jobspec #使某个作业忽略HUP信号

参考:https://willireamangel.github.io/2018/05/11/SSH%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/#more

相关操作:
bg、fg、jobs、kill、ctrl+c、ctrl+z

While循环读取文件

  1. exec读取文件,抛给while循环处理;
  1. exec <file
  2. while read line
  3. do
  4. ....
  5. done
  1. cat读取文件,采用管道传递给while循环处理
  1. cat file | while read line
  2. ...
  1. 循环结尾重定向读取的文件
  1. while read line
  2. do
  3. ...
  4. done<file

脚本使用场景

  1. while
    执行守护进程或无限循环(sleep),小于一分钟的循环处理。
  2. case
    服务启动脚本。
  3. 条件表达式
    简单的条件判断,如文件是否存在等。
  4. if
    取值判断,多用于不同值数量较少的情况。
  5. for
    正常循环处理。

for和select循环

for循环

1.格式

  1. for <variable> in list #循环调用取值列表,列表内容以空格区分
  2. do
  3. command
  4. done
  1. for((expr1;expr2;expr3)) #expr1为变量初始值,expr2为变量范围,expr3为变量自增减;先判断变量范围,循环,再处理自增减
  2. do
  3. command
  4. done

2.使用
用于有限的循环。

随机数产生方法

  1. -l 长度
  2. -d 数字数量
  3. -c 小写字母数量
  4. -C 大写字母数量
  5. -s 特殊字符数量

select循环语句

  1. select variable in list
  2. do
  3. ...
  4. done

与for循环不一样的是,select会打印出简单的菜单项供用户选择,需要用户手动停止。
- select信息调整
数组表示法:array=(n m q) ${array[@]}
循环提示符:PS3=""
菜单项对应数字:$REPLY

循环控制及状态返回值

循环控制

break

continue

退出

exit

exit n
退出当前shell程序,n为上一次程序执行的状态返回值,n省略下一个shell可通过“$?”接收exit n的n值

return

return n
用于在函数中作为函数的返回值,退出当前函数,以判断函数执行是否正确,下一个shell可通过“$?”接收exit n的n值。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注