转载自 https://segmentfault.com/a/1190000011704345
一、条件判断式语句
1.1 按照文件类型进行判断
两种判断格式:
test -e /root/install.log
[-e /root/install.log]
//推荐
1.2 按文件权限判断
1.3 两个文件之间进行比较
1.4 两个整数之间的比较
1.5 字符串的判断
1.6 多重条件判断
二、if语句
2.1 单分支if语句
列子1:判断当前登录用户是否为root
#!/bin/bash
test=$(env | grep "USER"|cut -d "="-f2
if["$test" == root]
then
echo "Current user is root."
fi
列子2:判断分区使用率
查看磁盘使用情况:
df -h
2.2 双分支if语句
列子1:判断输入的是否是一个目录
列子2:判断apache是否启动
注:不要把检测脚本名含有httpd,否则当apache停止了还是会输出httpd is ok!。
2.3 多分支if语句
判断用户输入的是什么文件:
三、case语句
四、for循环语句
4.1 语法一
4.2 语法二
批量删除用户:
五、while循环和until循环
5.1 while循环
5.2 until循环
5.3 时间
logfile=net_delay_$(date +%Y%m%d%H%M)
6.函数
function demoFun1(){
echo "这是我的第一个 入参" + $1
return `expr 1 + 1`
}
7. 按行读取变量或者命令输出
引用 https://qastack.cn/unix/9784/how-can-i-read-line-by-line-from-a-variable-in-bash
您可以使用while循环进行进程替换:
while read -r line
do
echo "$line"
done < <(jobs)
读取多行变量的最佳方法是设置一个空白IFS
变量,并printf
在该变量后面加上换行符:
# Printf '%s\n' "$var" is necessary because printf '%s' "$var" on a
# variable that doesn't end with a newline then the while loop will
# completely miss the last line of the variable.
while IFS= read -r line
do
echo "$line"
done < <(printf '%s\n' "$var")
注意:根据shellcheck sc2031的规定,使用进程替代比使用管道更可取,以避免[巧妙地]创建子shell。
另外,请注意,通过命名变量jobs
可能会引起混淆,因为这也是常见的shell命令的名称。