引言:Shell循环可以方便的帮助我们日常工作,提高工作效率,大志内容总结了一些。
目录
引言:Shell循环可以方便的帮助我们日常工作,提高工作效率,大志内容总结了一些。
总结:shell循环在LInux系统中有很多的应用方式,对于日常工作查找文件数目,判断内存大小等等还是很有帮助的。
一、for循环
for 变量名 in 列表;do
循环体
done
依次将列表中的元素赋值给“变量名”; 每次赋值后即执 行一次循环体; 直到列表中的元素耗尽,循环结束
比如创建用户,设置随机8位密码,包含数字、大小写字母、符号。并要求用户使用密码首次登录后,强制设置新密码。
先进入home目录,创建一个shell脚本并编辑
#!/bin/bash
> /root/user.log
for i in {1..10};do
#创建五个用户
useradd t$i && echo t$i is created
#随机生成密码
password=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 8)
#将用户和密码导出到user日志
echo t$i:$password >> /root/user.log
#设置密码
echo $password |passwd --stdin t$i &> /dev/null
#强制下次登录修改密码
passwd -e user$i &> /dev/null
done
二、while循环
while CONDITION; do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行 一次循环;直到条件测试状态为“false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值 会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
“:” 和true的返回值都为真
判断/var/目录下所有文件的类型
#!/bin/bash
dc=0
lc=0
cc=0
bc=0
oc=0
zc=0
ls -l /var |grep -v total >/tmp/var_ftype.txt
while read lines
do
ftype=`echo $lines |awk '{print $1}' |cut -c 1`
case $ftype in
d) dname=`echo $lines |awk '{print $9}'`; echo "$dname is a Directory" ; let dc+=1;;
l) lname=`echo $lines |awk '{print $9}'`; echo "$lname is a Links of Soft " ;let lc+=1 ;;
c) cname=`echo $lines |awk '{print $9}'`; echo "$cname is a Character of file" ;let cc+=1;;
b) bname=`echo $lines |awk '{print $9}'`; echo "$bname is a Block file" ; let bc+=1;;
-) zname=`echo $lines |awk '{print $9}'`; echo "$zname is a common file" ; let zc+=1;;
*) echo "Others files"; let oc+=1
esac
done </tmp/var_ftype.txt
echo '-----------------------------'
echo -e "var目录下普通文件数量: $zc\nvar目录下子目录数量:$dc\nvar目录下链接文件数量:$lc\nvar目录下字符类型文件数量: $cc\nvar
目录下块设备文件数量:$bc\n其他类型文件数量:$oc"
rm -f /tmp/var_ftype.txt
三、until循环
until 条件测试
do =执行命令
done
如果条件测试结果为假(传回值不为0),就进入循环。
执行命令区域。这些命令中,应该有改变条件测试的命令,这样子,才有机会在有限步骤后结束执行until 循环(除非你想要执行无穷循环)。
回到第一行,执行until命令。
until99乘法表
#!/bin/bash
a=1
b=1
until ((a>9)) #until 和while相反,条件假的执行,条件真就done结束
do
until ((b>a))
do
let "c=a*b"
echo -n "$a*$b=$c "
let b++
done
let a++
let b=1
echo ""
done