例题:
一、for
格式1:for 变量 in 范围; do 命令; done
格式2:for ((i=1;i<=100;i++));do 命令; done
①、找出UID大于1000的用户
for uid in `getent passwd |cut -d: -f3`;do if [ $uid -gt 1000 ];then grep "\<$uid\>" /etc/passwd|cut -d: -f1;fi;done
②、创建li,wang,zhang账户,并设置随机密码,下次登陆强制修改密码
#!/bin/bash
user="li wang zhang"
for i in $user;do
useradd $i
key=`cat /dev/urandom|tr -dc [:alnum:]|head -c12`
echo $key |passwd --stdin $i &> /dev/null
passwd -e $i
echo $i $key >> /data/name
echo "$i is created"
done
③、将YYYY-MM-DD目录内容移到对应的YYYY-MM/DD目录下
先创建
#!/bin/bash
for i in {1..365};do
DIR=`date -d "-$i day" +%F`
mkdir /data/test/$DIR -p
for j in {1..10};do
touch /data/test/$DIR/$RANDOM.txt
done
done
移动
#!/bin/bash
cd /data/test
for DIR in *;do
YYYY_MM=`echo $DIR|cut -d "-" -f1,2`
DD=`echo $DIR|cut -d "-" -f3`
[ -d $YYYY_MM/$DD ]||mkdir -p $YYYY_MM/$DD &> /dev/null
mv $DIR/* $YYYY_MM/$DD
done
④、创建99乘法表
#!/bin/bash
for i in {1..9};do
for j in `seq $i`;do
echo -e "${j}x${i}=$[$j*$i]\t\c"
done
echo
done
⑤、不管什么后缀,通通改为.bak后缀
#!/bin/bash
DIR=/data/test
cd $DIR
for i in *;do
PRE=`echo $i|sed -nr 's/(.*)\.([^.]+)$/\1/p'`
mv $i $PRE.bak
done
二、while
格式:while 条件; do 命令 ;done
: 和true永远为真
①、报警邮件:(每1分钟检查一次)
#/bin/bash
while :;do
USE=`df|sed -nr '/^\/dev\/sd/s#.* ([0-9]+)%.*#\1#p'|sort -nr|head -1`
[ $USE -gt 80 ] && echo DISK will be full from `hostname -I` |mail -s "Disk full" 827931744@qq.com
sleep 60
done
②、点菜
#!/bin/bash
color='echo -e \033[1;32m'
color1='echo -e \033[1;35m'
end='\033[0m'
sum=0
while :;do
echo -e "\033[1;34m\c"
cat <<EOF
1) 土豆丝
2)千叶豆腐
3)大盘鸡
4)红烧牛肉
5)素拼
6)拉面
7) 选择完毕
EOF
echo -e "\033[0m"
read -p "请您点菜:" MENU
case $MENU in
1|2)
$color这道菜价为:¥10$end
let sum+=10
$color1目前总共为:¥$sum$end
;;
3)
$color这道菜价为:¥20$end
let sum+=20
$color1目前总共为:¥$sum$end
;;
4) $color这道菜价为:¥25$end
let sum+=25
$color1目前总共为:¥$sum$end
;;
5|6) $color这道菜价为:¥6$end
let sum+=6
$color1目前总共为:¥$sum$end
;;
7)
$color1您点的菜总共为¥$sum$end
break
;;
*)
echo -e "\033[36;1m亲,没有这道菜哦,请重新选择吧\033[0m"
esac
done
三、shift
参数不确定时,将前一个参数处理完,下一个参数就变为了前一个参数。
创建任意账户
#!/bin/bash
if [ $# -eq 0 ];then
echo "Usage:`basename $0` user1 user2..."
exit
fi
while [ "$1" ];do
if id $1 &>/dev/null;then
echo $1 is exist
else
useradd $1
echo "$1 is created"
fi
shift
done
echo "All user is created"