2.shell之循环案例讲解

循环语句for

for 变量 in 字符串
	do
	语句1
	done

案例一,打印seq数字循环

#!/bin/bash
for i in `seq 15`
do
	echo -e "\033[32mnum is $i\033[0m"
done

案例二,求和1-100的值

#!/bin/bash
#auto sum 1 100
j=0
for ((i=1;i<=100;i++))
do
	j=`expr $i + $j`
done
echo $j

sh -x for2.sh

这里可以看变化

案例三, 找到相关log, 然后批量打包

#!/bin/bash
for i in `find /var/log -name "*.log"`
do
	tar -cvf 2020log.tar.gz $i
done


案例四 , 远程主机批量传输文件:

#!/bin/bash
#auto scp files for client
#by autors rayon 2020
for i in `seq 100 200 `
do
	scp -r /tmp/test.txt
root@192.168.56.$i:/data/webapps/www
done

案例五, 远程主机批量执行命令:

#!/bin/bash
#auto scp file for client
#by authors dxw 2020
for i in `seq 10 20`
do 
	ssh -l root 192.168.56.$i 'ls /tmp'
done

免秘钥登录

需要做本地执行ssh-keygen 认证生成秘钥和公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.56.11
执行上面的动作会把公钥文件追加到需要远程执行服务器的/root/.ssh/authorized_keys
如果直接拷贝过去的话会替换原来认证的文件替换掉如
scp -r /root/.ssh/id_rsa.pub root@192.168.56.11:/root/.ssh/autorized_keys

循环语句while

while 条件语句
do
	语句1
done

案例一,while条件判断数字

#!/bin/bash
i=1
while [[ $i -lt 10 ]];do
	echo $i;
	((i++));
done;

案例二, 扩展使用read命令

read -p "Please input number:" input
echo $input

案例三, while逐行读取某个文件

#!/bin/bash
while read line
do
	echo $line;
done < /etc/host

案例四 ,批量执行内容

while read line
do
	echo -e "\033[32m scp -r /tmp/test.txt root@line:/tmp \033[0m"
done < list.txt

list.txt

192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

Until 循环语句

until 条件
do
	action
done

直到满足条件, 才退出 。 否则执行action

案例一, 条件判断数字

#!/bin/bash
a=10
until [[ $a -lt 0 ]];do
	echo $a
	((a--))
done

case 选择语句

case $arg in
	pattern1)
		语句1
		;;
	pattern2)
		语句2
		;;
	*)
		语句3
		;;
esac

案例一, 创建选择参数脚本

#!/bin/bash
case $1 in
	monitor_log)
		monitor_log
		;;
	archive_log)
		archive_log
		;;
	*)
		echo "Usage: {$0 monitor_log | archive_log |help}"

案例二,安装apache

#!/bin/bash
#auto install lamp
#by authors dxw 2020
case $1 in
	apache)
	echo "wait installd httpd server...."
	#tar zxcf httpd-2.2.27.tar.gz;cd httpd-2.2.27
	;;
	mysql)
	echo "wait installd mysql server...."
	#具体的操作
	;;
	php)
	echo "wait installd php server......"
	;;
	*)
	echo "usage: {$0 Apache|mysql|php|help}"
	;;
esac

注意这里是直接 运行脚本时传入参数

select 选择语句

select一般用于选择菜单的创建 , 可以配合PS3来做菜单的打印输出信息

#!/bin/bash
PS3="What you like most of the open source system?"
select i in CentOS RedHat Ubuntu
do
	echo "Your Select System:" $i
done

案例一,实现安装lamp选择

#!/bin/bash
#auto install lamp
#by authors dxw 2020
PS3="Select your will exec Menu:"
select i in "Apache安装" "Mysql安装" "php安装"
	do
		case $i in
			Apache安装)
			echo "wait installd httpd server...."
			#tar zxcf httpd-2.2.27.tar.gz;cd httpd-2.2.27
			;;
			Mysql安装)
			echo "wait installd mysql server...."
			#具体的操作
			;;
			php安装)
			echo "wait installd php server......"
			;;
			*)
			echo "usage: {$0 Apache|mysql|php|help}"
			;;
		esac
done
posted @ 2021-03-31 23:28  白色的番茄  阅读(84)  评论(0编辑  收藏  举报