case语句 while循环 for循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34646546/article/details/88701937

循环控制

命令 说明
continue 表示跳出当前循环 并且重新执行循环
break 表示跳出当前循环 执行下一步
exit 退出当前脚本
return n 函数里的返回值 判断函数是否执行成功 如果成功 返回值为0 反之 返回值为n

case语句

	#!/bin/sh
	case $1 in
		y)
		echo yes
		;;
		n)
		echo no
		;;
		a)
		echo and
		;;
		q)
		  exit 1
		;;
		*)
		 echo "USAGE: `basename $0` [y|n|a|q] "
	esac
	

case语法

案例: 使用case语句加菜单的方式

		查看系统磁盘 d  df -h
		系统内存	f  free -h
		系统负载	u   uptime
		登录的用户  w   w
		显示帮助	h   caidan
		退出		q   exit

menu(){
cat<<EOF
          菜单
---- 1.查看硬盘使用 ----
---- 2.查看系统内存 ----
---- 3.查看当前用户 ----
---- 4.  显示菜单   ----
---- 5.   退出      ----
EOF
}
menu
while true  
do
	read -p "请输入序号来执行对应: "  ppp
        case $ppp in
	1)
	df -h
        ;;
	2)
	free
        ;;
	3)
	whoami
        ;;
	4)
	menu
        ;;
	5)
	exit
        ;;
	*)
	echo "请输入对应序号 !"
        ;;
	esac
        
done

案例:

	case批量删除用户
	要删除用户的前缀
	要删除几个用户

案例: Nginx 启动脚本


. /etc/init.d/function
start(){
#/etc/init.d/nginx
systemctl start nginx
		if [ -f /var/run/nginx.pid ]
		then
		action "nginx start is"  true
		else
		action "nginx start is"  false
		fi
}

stop(){
systemctl stop nginx
		if [ -f /var/run/nginx.pid ]
		then
		action "nginx start is"  false
		else
		action "nginx start is"  true
		fi
}

reload(){
systemctl reload nginx
		if [ -f /var/run/nginx.pid ]
		then
		action "nginx start is"  true
		else
		action "nginx start is"  false
		fi
}

status(){
		if [ -f /var/run/nginx.pid ]
		then
		echo  -e "nginx is \033[32m running... \033[0m"  
		else
		echo -e "nginx is \033[31m death... \033[0m"
		fi
}
restart(){
systemctl restart nginx
                if [ -f /var/run/nginx.pid ]
                then
                action "nginx start is"  true
                else
                action "nginx start is"  false
                fi
}



case $1 in 
	start)
	start
	;;
	stop)
	stop
	;;
	reload)
	reload
	;;
	restart)
	restart
	;;
        status)
        status
	;;
        *)
	echo  "语法: sh `basename $0` [start|stop|reload|staus|restart]" 

esac

while 循环

if语句

单分支 一个条件 一个结果

	if [ 你有钱 ]			if [ $? -eq 0 ] 
	then					then
		我就嫁给你				echo "ok"
	fi						fi

双分支 一个条件 两个结果

	if [ 你有钱 ]			if [ $? -eq 0 ] 
	then					then
		我就嫁给你				echo "ok"
	else					 else
		不鸟你				    echo "no"
	fi						fi
		   	   

多分支 多个条件 多个结果

	if [ 你有钱 ]
	then
		我就嫁给你
	elif [ 你有房 ]
	then
		我也嫁给你
	elif [ 你有车 ]
	then
		我也可以考虑
	else
		不鸟你
	fi

for循环

语法格式:

for 变量名 in 取值列表 {数字的序列 字母的序列 字符串 命令}
do
done

案例 :考试题

检测10.0.0/24在线IP 并且追加到一个文件内

	#!/bin/sh
	for i in `seq 254`
	do
		IP=10.0.0.$i
		{
		ping -c 1 -W 1 $IP &>/dev/null
		if [ $? -eq 0 ];then
		echo "Host $IP is ok..."|tee -a 2.txt
		fi 
		} &
			
	done

案例:

你们公司有多少人,答500个左右,你们划分了多少个子网。
一个C 1-254 两个=508个地址
公司: 服务器地址 打印机 门禁 网关 每个人的PC 手机 平板 3个IP AP AC控制器 监控系统

考试题:计算1到100相加 用for循环

	for i in `seq 100`;do sum=$[$sum+$i];done;echo $sum
	#!/bin/sh
	i=0
	while [ $i -le 100 ]
	do
		sum=$[$sum+$i]
		let i++
	done
	echo $sum

案例: 使用for循环创建用户

	file  1.txt  密码统一为123 
		oldboy
		oldguo
		oldbg
		olddog
	echo 123|passwd --stdin 用户名	
	#!/bin/sh
	for i in `cat 2.txt`
	do
		useradd $i &>/dev/null
		[ $? -eq 0 ] && echo "Create $i is ok"
		echo 123|passwd --stdin $i &>/dev/null
		[ $? -eq 0 ] && echo "Create $i passwd is ok"
	done

猜你喜欢

转载自blog.csdn.net/qq_34646546/article/details/88701937