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