Shell脚本进阶练习

一、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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值