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