循环
在shell中循环有三种,分别是for循环,while循环,以及util循环。·
for循环
#迭代风格
for var in list
do
commands;
done;
#迭代风格
for var in {a..z}
do
commands;
done;
#c风格的循环
for((i = 0;i < 10:i++))
{
commands;
}
while循环
#while循环
while condition
do
commands;
done;
util循环
#until循环会一直运行,指导条件为真
until condition
do
commands;
done
比较与测试
if 条件
if condition
then
commands;
fi
if condition
then
commands;
else if condition; then
commands;
else
commands;
fi
算术比较
操作符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于或等于 |
-le | 小于或等于 |
文件测试
操作符 | 含义 |
---|---|
-f | 是一个正确的文件路径或文件名,则返回真 |
-x | 可执行,则返回真 |
-d | 是一个目录,则返回真 |
-e | 文件存在,则返回真 |
-c | 字符设备,则返回真 |
-b | 块设备,则返回真 |
-w | 可写,则返回真 |
-r | 可读,则返回真 |
-L | 符号链接,则返回真 |
字符串比较
对于字符串型值得判断一般采用嵌套的中括号,如[[ str1== str2]]
操作符 | 含义 |
---|---|
= | 等于(和“==”相同) |
== | 等于(和“==”相同) |
!= | 不相同,则返回真 |
> | 按字母序排序,大于则返回真 |
< | 按字母序排序,小于则返回真 |
-z | 空字符串,则返回真 |
-n | 非空字符串,则返回真 |
如下所示是一段示例代码,通过对/etc/passwd文件的解析,获得每个用户的对应的SHELL。
#!/bin/bash
RES="$(cat /etc/passwd)"
ROOT=root
for line in $RES;
do
oldIFS=$IFS
IFS=:
count=0
for item in $line;
do
[ $count == 0 ] && user=$item;
[ $count -eq 6 ] && shell=$item;
let count++
done;
IFS=$oldIFS
echo user:$user shell:$shell;
done;
运行结果如下: