SHELL用法四(for语句)

1、SHELL编程For语句案例实战
1)For语句固定的语法格式:
For i in (表达式)
do
动作1
done
2)For语句案例操作一:
#!/bin/bash
for NUM in 1 2 3 4
do
echo “$NUM) www.jd.com”
done
3)For语句案例操作二:
#!/bin/bash
for NUM in $(echo {1..4})
do
echo “$NUM) www.jd.com”
done
4)For语句案例操作三:
#!/bin/bash
COMMAND="$*"for IP in 127.0.0.{1..10}
do
echo -e "33[32mThe $IP Exec Command:33[0m"
ssh -l root $IP "$COMMAND"
scp -r jfedu.txt root@$IP:/data/backup/
done
5)For语句案例操作四:
#!/bin/bash
for LOG in `ls access_2019*`
do
echo $LOG
tar -czvf ${LOG}.tar.gz $LOG
if [ ! -d /data/backup/`date +%F` ];then
mkdir -p /data/backup/`date +%F`
fi
mv ${LOG}.tar.gz /data/backup/`date +%F`
rm -rf $LOG
done
6)For语句案例操作五:
#!/bin/bash
for LOG in `ls /data/backup/2019-07-06/*`
doecho $LOG
tar -xzf $LOG -C /data/logs/linux_web/
done
7)For循环打印10秒等待提示:
for ((j=0;j<=10;j++))
do
echo -ne "33[32m-33[0m"
sleep 1
done
echo
2、SHELL编程While语句案例实战
1)While语句固定的语法格式:
While (表达式|条件)
do
动作1
done
(1) 循环打印BAT企业官网,read指令用于读取行或者读取变量:
#!/bin/bash
#By author jfedu.net 2017
while read LINE
do
echo $LINEdone <jfedu.txt
其中jfedu.txt内容为:
www.baidu.com
www.taobao.com
www.qq.com
(2) While无限每秒输出Hello World:
#!/bin/bash
#By author jfedu.net 2017
while sleep 1
do
echo -e "33[32mHello World.33[0m"
done
(3) 循环打印1至100数字,expr用于运算逻辑工具:
#!/bin/bash
#By author jfedu.net 2017
i=0
while ((i<=100))
do
echo $i
i=`expr $i + 1`
done
(4) While循环求1-100的总和:#!/bin/bash
#By author jfedu.net 2017
#auto sum 1 100
j=0
i=1
while ((i<=100))
do
j=`expr $i + $j`
((i++))
done
echo $j
(5) While循环逐行读取文件:
#!/bin/bash
#By author jfedu.net 2017
while read line
do
echo $line;
done < /etc/hosts
(6) While循环判断输入数字是否大于100(IP正确性类似的),如果小于一
直提示其输入,直到正确为止:
#!/bin/bash
while truedo
read -p "Please input A Number:" INPUT
if [ "$INPUT" -gt 100 ];then
echo $INPUT
break;
fi
done
(7) 每5秒循环判断/etc/passwd是否被非法修改:
#!/bin/bash
#Check File to change.
#By author jfedu.net 2017
FILES="/etc/passwd"
while true
do
echo "The Time is `date +%F-%T`"
OLD=`md5sum $FILES|cut -d" " -f 1`
sleep 5
NEW=`md5sum $FILES|cut -d" " -f 1`
if [[ $OLD != $NEW ]];then
echo "The $FILES has been modified."
fi
done
(8) 每10秒判断jfedu用户是否登录系统:
#!/bin/bash
while true
do
USER=$*
echo -e "33[32m`date`33[0m"
for i in $USER
do
NUM=$(who|grep $i|wc -l)
if [ $NUM -ne 0 ];then
echo "The $i is Login Linux System."
fi
done
echo "--------------------"
sleep 10
done
3、SHELL编程实战MYSQL数据库备份脚本
 备份脚本实现任意单个库的备份;
#!/bin/bash
#2019年7月6日15:54:03
#auto backup mysql database.
#by author www.jfedu.net####################
SQL_USR="backup"
SQL_PWD="backup"
SQL_DB="$1"
SQL_DIR="/data/backup/$(date +%F)"
SQL_CMD="/usr/bin/mysqldump"
if [ $# -eq 0 -o "$1" == "help" ];then
echo -e "33[32m----------------33[0m"
echo -e "33[32mUsage:{/bin/bash $0
jfedu1|www|jfedu2|help}033[0m"
exit 1
fi
if [ ! -d $SQL_DIR ];then
mkdir -p $SQL_DIR
fi
$SQL_CMD -u$SQL_USR -p$SQL_PWD $SQL_DB >
$SQL_DIR/${SQL_DB}.sql
if [ $? -eq 0 ];then
echo -e "33[32mThe MYSQL $SQL_DB backup
success.033[0m"
echo "----------------"
echo "ls -l $SQL_DIR/"ls -l $SQL_DIR/
else
rm -rf $SQL_DIR/${SQL_DB}.sql
echo -e "33[32mThe MYSQL $SQL_DB backup
Failed.033[0m"
exit
fi
 备份脚本实现任意多个库备份;
#!/bin/bash
#2019年7月6日15:54:03
#auto backup mysql database.
#by author www.jfedu.net
####################
SQL_USR="backup"
SQL_PWD="backup"
SQL_DB="$*"
SQL_DIR="/data/backup/$(date +%F)"
SQL_CMD="/usr/bin/mysqldump"
if [ $# -eq 0 -o "$1" == "help" ];then
echo -e "33[32m----------------33[0m"
echo -e "33[32mUsage:{/bin/bash $0
jfedu1|www|jfedu2|help}033[0m"exit 1
fi
if [ ! -d $SQL_DIR ];then
mkdir -p $SQL_DIR
fi
for SQL_DB in `echo $SQL_DB`
do
$SQL_CMD -u$SQL_USR -p$SQL_PWD $SQL_DB >
$SQL_DIR/${SQL_DB}.sql
if [ $? -eq 0 ];then
echo -e "33[32mThe MYSQL $SQL_DB backup
success.033[0m"
echo "----------------"
echo "ls -l $SQL_DIR/"
ls -l $SQL_DIR/
else
rm -rf $SQL_DIR/${SQL_DB}.sql
echo -e "33[32mThe MYSQL $SQL_DB backup
Failed.033[0m"
exit
fi
done
 备份脚本实现所有数据库的备份;
#!/bin/bash
#2019年7月6日15:54:03
#auto backup mysql database.
#by author www.jfedu.net
#########################
SQL_USR="backup"
SQL_PWD="backup"
SQL_DB="$*"
SQL_DIR="/data/backup/$(date +%F)"
SQL_CMD="/usr/bin/mysqldump"
if [ $# -eq 0 -o "$1" == "help" ];then
echo -e "33[32m----------------33[0m"
echo -e "33[32mUsage:{/bin/bash $0
jfedu1|www|jfedu2|help}033[0m"
exit 1
fi
if [ ! -d $SQL_DIR ];then
mkdir -p $SQL_DIR
fi
for SQL_DB in `echo $SQL_DB`do
if [ "$SQL_DB" == "all" ];then
$SQL_CMD -u$SQL_USR -p$SQL_PWD
--all-databases > $SQL_DIR/${SQL_DB}.sql
if [ $? -eq 0 ];then
echo -e "33[32mThe MYSQL $SQL_DB
backup success.033[0m"
echo "----------------"
echo "ls -l $SQL_DIR/"
ls -l $SQL_DIR/
continue
else
rm -rf $SQL_DIR/${SQL_DB}.sql
echo -e "33[32mThe MYSQL $SQL_DB
backup Failed.033[0m"
exit
fi
fi
$SQL_CMD -u$SQL_USR -p$SQL_PWD $SQL_DB >
$SQL_DIR/${SQL_DB}.sql
if [ $? -eq 0 ];then
echo -e "33[32mThe MYSQL $SQL_DB backupsuccess.33[0m"
echo "----------------"
echo "ls -l $SQL_DIR/"
ls -l $SQL_DIR/
else
rm -rf $SQL_DIR/${SQL_DB}.sql
echo -e "33[32mThe MYSQL $SQL_DB backup
Failed.033[0m"
exit
fi
done
4、SHELL编程实战Linux系统IP修改脚本
 能够将动态IP修改为静态IP;
#!/bin/bash
#2019年7月6日16:51:27
#auto change server ip.
#by author www.jfedu.net
####################
ETH_IPADDR="$1"
GATEWAY="10.10.10.1"
DNS_SERVER="8.8.8.8"ETH_NAME="ifcfg-ens33"
NETMASK="255.255.255.0"
ETH_BAK="/data/backup/`date +%F`"
ETH_DIR="/etc/sysconfig/network-scripts"
if [ $# -eq 0 ];then
echo -e "33[32m---------------33[0m"
echo -e "33[32mUsage:{/bin/bash $0
10.10.10.111|1.1.1.1|help}033[0m"
exit 1
fi
if [ ! -d $ETH_BAK ];then
mkdir -p $ETH_BAK
fi
cd $ETH_DIR
cp $ETH_NAME $ETH_BAK
grep "dhcp" $ETH_NAME
if [ $? -eq 0 ];then
echo "TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"">$ETH_NAMEecho "IPADDR=$ETH_IPADDR" >>$ETH_NAME
echo "NETMASK=$NETMASK" >>$ETH_NAME
echo "GATEWAY=$GATEWAY" >>$ETH_NAME
echo "DNS1=$DNS_SERVER" >>$ETH_NAME
fi
 能够实现本身静态IP,修改为其他静态IP;
#!/bin/bash
#2019年7月6日16:51:27
#auto change server ip.
#by author www.jfedu.net
####################
ETH_IPADDR="$1"
GATEWAY="10.10.10.1"
DNS_SERVER="8.8.8.8"
ETH_NAME="ifcfg-ens33"
NETMASK="255.255.255.0"
ETH_BAK="/data/backup/`date +%F`"
ETH_DIR="/etc/sysconfig/network-scripts"
if [ $# -eq 0 ];then
echo -e "33[32m---------------33[0m"
echo -e "33[32mUsage:{/bin/bash $0
10.10.10.111|1.1.1.1|help}033[0m"exit 1
fi
if [ ! -d $ETH_BAK ];then
mkdir -p $ETH_BAK
fi
cd $ETH_DIR
cp $ETH_NAME $ETH_BAK
echo "TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"">$ETH_NAME
echo "IPADDR=$ETH_IPADDR" >>$ETH_NAME
echo "NETMASK=$NETMASK" >>$ETH_NAME
echo "GATEWAY=$GATEWAY" >>$ETH_NAME
echo "DNS1=$DNS_SERVER" >>$ETH_NAME
 判断用户输入的IP是否正确;
#!/bin/bash
#2019年7月6日16:51:27
#auto change server ip.
#by author www.jfedu.net
####################GATEWAY="10.10.10.1"
DNS_SERVER="8.8.8.8"
ETH_NAME="ifcfg-ens33"
NETMASK="255.255.255.0"
ETH_BAK="/data/backup/`date +%F`"
ETH_DIR="/etc/sysconfig/network-scripts"
if [ ! -d $ETH_BAK ];then
mkdir -p $ETH_BAK
fi
while true
do
read -p "Please Input Server IPaddr: " ETH_IPADDR
if [ ! -z $ETH_IPADDR ];then
IP1=`echo $ETH_IPADDR|cut -d "." -f 1`
IP2=`echo $ETH_IPADDR|cut -d "." -f 2`
IP3=`echo $ETH_IPADDR|cut -d "." -f 3`
IP4=`echo $ETH_IPADDR|cut -d "." -f 4`
if [ $IP1 -ge 1 -a $IP1 -le 255 -a $IP2 -ge 0 -a $IP2 -le 255 -a $IP3 -ge 0
-a $IP3 -le 255 -a $IP4 -ge 0 -a $IP1 -le 255 ];then
ETH_IPADDR=$ETH_IPADDR
break
fifi
done
cd $ETH_DIR
cp $ETH_NAME $ETH_BAK
echo "TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"">$ETH_NAME
echo "IPADDR=$ETH_IPADDR" >>$ETH_NAME
echo "NETMASK=$NETMASK" >>$ETH_NAME
echo "GATEWAY=$GATEWAY" >>$ETH_NAME
echo "DNS1=$DNS_SERVER" >>$ETH_NAME
if [ $? -eq 0 ];then
echo
echo "cat $ETH_DIR/$ETH_NAME"
cat $ETH_DIR/$ETH_NAME
echo "----------------"
echo -e "33[32mThe Server IPaddr config success.33[0m"
else
echo
echo -e "33[32mThe Server IPaddr config Failed.33[0m"exit
fi
原文地址:https://www.cnblogs.com/nshgo/p/12157301.html