Shell脚本案例---2

本文介绍了Linux自动化脚本的实现,包括ping命令的多种使用方式、shell脚本参数解析、磁盘使用率的监测以及系统信息的获取。此外,还详细展示了如何通过脚本批量创建和删除用户,以及在用户输入校验方面的应用。
摘要由CSDN通过智能技术生成

1)请ping通百度域名3次,成功或失败分别输出不同的信息。
用三种方式完成。

方式一:
此处需要注意的点是,如果3次都ping通,&&就会生效,即执行其后面的命令,ping www.baidu.com ok
3次只要有一次没有ping通,||生效,会执行其后面的命令,ping www.baidu.com error

#!/bin/bash
IP=www.baidu.com
ping -c3 $IP &>/dev/null && echo "ping $IP ok" || echo "ping $IP error"

方式二:
if语句完成非交互式的ping网址
非交互式如下:

#!/bin/bash

#定义变量
ip=www.baidu.com

#只ping三次且不输出任何内容
ping -c3 $ip &>/dev/null

#判断上一个语句的执行结果,执行成功则为0;否则是1
if [ $? -eq 0 ];then
  echo "$ip ok"
else
  echo "$ip error"
fi

方式三:
if语句完成交互式的ping网址
交互式如下:

#!/bin/bash

#执行脚本后,用户输入变量IP,并且有提示语句
read -p "please input  network ip:" IP

#只ping三次且不输出任何内容
ping -c3 $IP &>/dev/null

#判断上一个语句的执行结果,执行成功则为0;否则是1
if [ $? -eq 0 ];then
  echo "$IP ok"
else
  echo "$IP error"
fi

2)相关参数的含义。
原shell脚本如下:

[root@db01 scripts]# cat test.sh 
#!/bin/bash
echo "第3个位置是$3"
echo "第2个位置是$2"
echo "第1个位置是$1"
echo "所有参数是:$*"
echo "所有参数是:$@"
echo "参数个数是:$#"
echo "当前进程PID是:$$"
echo "当前文件名是:$0"
echo '$4=' $4
echo '$5=' $5
echo '$*=' $*
echo '$$=' $#
echo '$@=' $@
echo '$$=' $$
echo '$0=' $0

脚本执行结果如下:

[root@db01 scripts]# sh test.sh 1 2 3 4 5 
第3个位置是3
第2个位置是2
第1个位置是1
所有参数是:1 2 3 4 5
所有参数是:1 2 3 4 5
参数个数是:5
当前进程PID是:76280
当前文件名是:test.sh
$4= 4
$5= 5
$*= 1 2 3 4 5
$$= 5
$@= 1 2 3 4 5
$$= 76280
$0= test.sh

关于单引号和双引号的说明

单引号---所见即所得---强引用---针对字符串
双引号---变量的解析---弱引用---针对字符串

3)检查磁盘使用率,如果超过10%,则将结果输入到文件/tmp/Disk_Free.txt中;否则输出内容“磁盘目前良好”

#!/bin/bash

#先用df -h查看磁盘使用情况
#再用grep匹配到根分区的那一行
#接着用awk找到磁盘使用率并过滤掉百分号,以方便比较
Disk_Free=$(df -h|grep /$|awk '{print $(NF-1)}'|awk -F '%' '{print $1}')

#将结果与10进行比较,此处结果作为echo输出的内容,变量要用大括号括起来
if [ $Disk_Free -gt 10 ];then
  echo "disk use is:${Disk_Free}%" >> /tmp/Disk_Free.txt
else
  echo "disk use is ok,now is ${Disk_Free}%" >>/tmp/Disk_Free.txt
fi

4)输出Linux系统相关信息。

[root@db01 scripts]# cat test.sh 
#!/bin/bash
System=$(hostnamectl|grep System|awk -F ':' '{print $2}')
Kernel=$(hostnamectl|grep Kernel|awk -F ':' '{print $2}') 
virtua=$(hostnamectl|grep Virtua|awk -F ':' '{print $2}')
st_hos=$(hostnamectl|grep host|awk -F ':' '{print $2}')
    
echo "操作系统:$System" >>/tmp/info.txt
echo "系统内核:$Kernel" >>/tmp/info.txt
echo "虚拟平台:$virtua" >>/tmp/info.txt
echo "静态主机:$st_hos" >>/tmp/info.txt

#CPU负载情况
cpu_load1=$(w|grep load|awk -F '[, ]+' '{print $(NF-2)}')
cpu_load5=$(w|grep load|awk -F '[, ]+' '{print $(NF-1)}')
cpu_load15=$(w|grep load|awk -F '[, ]+' '{print $NF}')
echo "CPU1分钟负载是:$cpu_load1" >> /tmp/info.txt
echo "CPU5分钟负载是:$cpu_load5" >> /tmp/info.txt
echo "CPU15分钟负载是:$cpu_load15" >> /tmp/info.txt

echo "==================$(date +%F)=================" >>/tmp/info.txt

5-1)用for循环,通过交互式输入用户前缀和用户数量,用户密码统一设置为123,批量创建用户。

[root@db01 scripts]# vim test.sh 
#!/bin/bash

read -p "请输入用户数量:" num
read -p "请输入前缀:"  pre

for i in $(seq $num);do
    username=$pre$i
    useradd $username &> /dev/null
    echo 123|passwd --stdin $username &> /dev/null
    if [ $? -eq 0 ];then
        echo "user $username create ok"
    fi
done

要批量删除上述的用户,一行Linux命令即可。
(假设创建了10个用户,boy1 boy2 boy3 … boy10)

for i in boy{1..10};do userdel $i;done

5-2)在第一问的基础上,先判断输入的创建用户的数量是否为数字

[root@db01 scripts]# cat test.sh 
#!/bin/bash
read -p "请输入用户数量:" num
if [[ ! $num =~ ^[0-9]+$ ]];then
    echo "错误,请输入数字"
    exit 1
fi

read -p "请输入前缀:"  pre

for i in $(seq $num);do
    username=$pre$i
    useradd $username &> /dev/null
    echo 123|passwd --stdin $username &> /dev/null
    if [ $? -eq 0 ];then
        echo "user $username create ok"
    fi
done

5-3)在第二问的基础上,判断用户名的前缀是否是字母,并且都可以有无数次试错机会。

[root@db01 scripts]# cat test.sh 
#!/bin/bash
read -p "请输入用户数量:" num

while true
do
    if [[ $num =~ ^[0-9]+$ ]];then
        break
    else
        echo "错误,请输入数字"
        read -p "请输入用户数量:" num
    fi
done

read -p "请输入前缀:" pre

while true
do
    if [[ $pre =~ ^[a-Z]+$ ]];then
        break
    else
        echo "错误,请输入拼音"
        read -p "请输入前缀:" pre
    fi
done

for i in $(seq $num);do
    username=$pre$i
    useradd $username &> /dev/null
    echo 123|passwd --stdin $username &> /dev/null
    if [ $? -eq 0 ];then
        echo "user $username create ok"
    fi
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值