格式
for 名称 in 列表
do
循环体
done
例子:
列出/etc/passwd文件中,第1,3,6,12行的用户名,UID,Shell
#!/bin/bash for line in 1 3 6 12 do Username=$(head -$line /etc/passwd | tail -1 | awk -F: ‘{print $1}‘) Userid=$(head -$line /etc/passwd | tail -1 | awk -F: ‘{print $3}‘) Usershell=$(head -$line /etc/passwd | tail -1 | awk -F: ‘{print $7}‘) echo -e "UserName:$Username\tUserID:$Userid\tUserShell:$Usershell" done
列表生成
1.逐个给出 如 /etc/fstab /etc/inittab
2.通配符匹配 如 /var/*
3.命令生产列表
例:
#!/bin/bash for File in `ls /var` do file /var/$File done
4.数字序列{1..100} 会自动展开为1到100
{启始数字..结束数字}
seq 自动生成数字序列:
sed 3: 生成从1到3
sed 3 16 生产从3到16
sed 3 2 16 生成3到16,但会间隔2
3 5 7 9 11 13 15
练习:显示/etc/passwd 所有用户的用户名和Shell
#!/bin/bash LINES=$(wc -l /etc/passwd | awk -F" " ‘{print $1}‘) for I in $(seq 1 $LINES) do head -$I /etc/passwd | tail -1 | awk -F: ‘{print $1,$7}‘ done
Shell脚本中算数运算
Shell不支持浮点数:计算结果中,浮点会被园为整数
1.22=1;1.99=1
算数运算实现方式
$[expression]
如
a=1
b=2
c=$[$a+$b]
echo $c
3
脚本联系
计算0到100的总和
#!/bin/bash sum=0 for i in $(seq 0 100) do sum=$[$sum+$i] done echo $sum
计算所有用户的UID总和
#!/bin/bash idsum=0 for i in $(awk -F: ‘{print $3}‘ /etc/passwd) do idsum=$[$idsum+$i] done echo $idsum
时间: 2024-10-28 09:32:01