代码格式有问题,再加上英文单词看不懂……大量的时间浪费在排错上面了……
主要出错位置:while中嵌套if忘记写than了……shell
备注:根据我我的习惯,我统一在后缀.sh脚本文件中执行:vim
chmod 700 XXX.sh
一般脚本都是从上至下一股脑的执行,效率是效率,但一旦某条命令执行失败了,那后面的功能全都会受到影响。 bash
if 条件测试操做 then 命令序列1 else 命令序列2 fi
存在不新建目录markdown
不存在新建目录app
[root@mmx ~]# clear [root@mmx ~]# cat a.sh #!/bin/bash DIR="/root/nice" if [ ! -d $DIR ] then mkdir -p $DIR fi [root@mmx ~]# ./a.sh [root@mmx ~]# ls anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Videos a.sh Downloads Music Public Desktop happy.txt nice Templates
if 条件测试操做1 then 命令序列1 elif 条件测试操做2 then 命令序列2 else 命令序列3 fi
Host IP:XXX is on-lineide
Host IP:XXX is off-line测试
[root@mmx ~]# cat b.sh #!/bin/bash ping -c 3 -i 0.01 -w 3 $1 &> /dev/null if [ $? -eq 0 ] then echo "Host $1 is on-line" else echo "Host $1 is off-line" fi [root@mmx ~]# ./b.sh 192.168.0.1 Host 192.168.0.1 is on-line [root@mmx ~]# ./b.sh 192.168.0.51 Host 192.168.0.51 is off-line [root@mmx ~]#
(优秀,良好,及格,不及格,错误)code
[root@mmx ~]# cat c.sh #!/bin/bash read -p "请输入你的成绩:" GRADE if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] then echo " 成绩$GRADE良好 " elif [ $GRADE -ge 60 ] && [ $GRADE -le 85 ] then echo " 成绩$GRADE及格 " elif [ $GRADE -ge 0 ] && [ $GRADE -le 100 ] then echo " 成绩$GRADE不及格 " else echo "成绩$GRADE超出范围" fi [root@mmx ~]# ./c.sh 请输入你的成绩:1001 成绩1001超出范围 [root@mmx ~]# ./c.sh 请输入你的成绩:75 成绩75及格 [root@mmx ~]# ./c.sh 请输入你的成绩:30 成绩30不及格
for:肯定次数循环游戏
while:不肯定次数循环crontab
for 变量名 in 取值列表 do 命令序列 done
分析:
一、用户名表
二、批量设置密码或密码对应表
三、bash脚本中读取与写入密码
四、执行脚本
[root@mmx Desktop]# ls a.sh users.txt
[root@mmx Desktop]# cat users.txt mmx xxm xiaoming xiaomingtongxue
[root@mmx Desktop]# cat a.sh #!/bin/bash # for循环 read -p "Enter The Users Password: " PASSWD for UNAME in `cat users.txt` do id $UNAME &> /dev/null if [ $? -eq 0 ] # 若是为真 then echo "$UNAME,Already exists" else useradd $UNAME &> /dev/null echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null echo "$UNAME,Create success" fi done
[root@mmx Desktop]# ./a.sh Enter The Users Password: 123 mmx,Already exists xxm,Create success xiaoming,Create success xiaomingtongxue,Create success
练习2:判断主机在线状况
分析:
一、IP地址表
二、判断是否能ping通(ping通返回结果0-在线,ping不通返回结果1-不在线)
三、编写脚本
四、执行脚本
一、填写须要查询主机在线状况IP地址
[root@mmx ~]# cat /root/Desktop/host_ip.txt 127.0.0.1 192.168.0.20 114.114.114.114 12.41.21.3
二、编写bash脚本
[root@mmx ~]# cat host_link.sh #!/bin/bash HLIST=$(cat /root/Desktop/host_ip.txt) # 路径 for IP in $HLIST do ping -c 3 -i 0.2 -W 3 $IP &> /dev/null if [ $? -eq 0 ] then echo "Host $IP is On-line." else echo "Host $IP is Off-line." fi done
三、执行测试
[root@mmx ~]# ./host_link.sh Host 127.0.0.1 is On-line. Host 192.168.0.20 is On-line. Host 114.114.114.114 is On-line. Host 12.41.21.3 is Off-line.
while 条件测试语句 do 命令序列 done
分析:
一、随机数$RANDOM % 1000 保证1000之内
二、TIMES计数器
三、猜想提示高低
[root@mmx ~]# cat guess.sh #!/bin/bash PRICE=$(expr $RANDOM % 1000) TIMES=0 echo "请输入商品实际价格0~999" while true do read -p "请输入猜想的商品价格:" INT let TIMES++ if [ $INT -eq $PRICE ] then echo "恭喜您猜对了,实际价格是:$PRICE" echo "您猜想次数为:$TIMES" exit elif [ $INT -gt $PRICE ] then echo "过高了" else echo "过低了" fi done
[root@mmx ~]# ./guess.sh 请输入商品实际价格0~999 请输入猜想的商品价格:500 过高了 请输入猜想的商品价格:250 过低了 请输入猜想的商品价格:375 过高了 请输入猜想的商品价格:300 过高了 请输入猜想的商品价格:275 过高了 请输入猜想的商品价格:255 恭喜您猜对了,实际价格是:255 您猜想次数为:6
计划任务分为一次性计划任务与长期性计划任务
[root@mmx ~]# at 22:39 warning: commands will be executed using /bin/sh at> reboot at> <EOT> job 1 at Sat Jul 3 22:39:00 2021
参数 | 做用 |
---|---|
-f | 指定包含命令的任务文件 |
-q | 指定新任务名称 |
-l | 显示待执行任务列表 |
-d | 删除指定待执行任务 |
-m | 任务执行后给用户发邮件 |
注意:本机时间必定要正确!!!
[root@mmx ~]# echo "nice to me to!" > mmx.txt | at 22:48 [root@mmx ~]# ls anaconda-ks.cfg Desktop Documents Downloads guess.sh mmx.txt Music original-ks.cfg Pictures Public Templates Videos
注意:一共两组参数
第一组:分、时、日、月、星期(分钟必须写,日和星期只能写一个)
第二组:命令,命令须要写详细地址,whereis查看
参数 | 做用 |
---|---|
-e | 编辑计划任务 |
-u | 指定用户名称 |
-l | 列出任务列表 |
-r | 删除计划任务 |
[root@mmx ~]# crontab -l */1 * * * * /usr/bin/ls -al > mmx.txt # 分时日月星期,分钟必须写,*/1表明每分钟执行一次 [root@mmx ~]# cat mmx.txt total 72 dr-xr-x---. 15 root root 4096 Jul 3 22:47 . dr-xr-xr-x. 17 root root 224 Jul 3 11:07 .. -rw-------. 1 root root 2632 Jul 3 11:13 anaconda-ks.cfg -rw-------. 1 root root 2969 Jul 3 07:44 .bash_history -rw-r--r--. 1 root root 18 Aug 12 2018 .bash_logout -rw-r--r--. 1 root root 176 Aug 12 2018 .bash_profile -rw-r--r--. 1 root root 176 Aug 12 2018 .bashrc drwx------. 11 root root 244 Jul 3 03:17 .cache drwx------. 13 root root 241 Jul 3 22:53 .config -rw-r--r--. 1 root root 100 Aug 12 2018 .cshrc drwxr-xr-x. 2 root root 115 Jul 3 07:05 Desktop drwxr-xr-x. 2 root root 6 Jul 3 11:14 Documents drwxr-xr-x. 2 root root 6 Jul 3 11:14 Downloads -rw-------. 1 root root 16 Jul 3 11:14 .esd_auth -rwxr-xr-x. 1 root root 378 Jul 3 07:29 guess.sh -rw-------. 1 root root 620 Jul 3 03:17 .ICEauthority drwx------. 3 root root 19 Jul 3 11:14 .local -rw-r--r--. 1 root root 0 Jul 3 23:01 mmx.txt drwx------. 5 root root 66 Jul 3 03:17 .mozilla drwxr-xr-x. 2 root root 6 Jul 3 11:14 Music -rw-------. 1 root root 2053 Jul 3 11:13 original-ks.cfg drwxr-xr-x. 2 root root 6 Jul 3 11:14 Pictures drwxr-----. 3 root root 19 Jul 3 11:14 .pki drwxr-xr-x. 2 root root 6 Jul 3 11:14 Public -rw-r--r--. 1 root root 129 Aug 12 2018 .tcshrc drwxr-xr-x. 2 root root 6 Jul 3 11:14 Templates drwxr-xr-x. 2 root root 6 Jul 3 11:14 Videos -rw-------. 1 root root 20272 Jul 3 07:29 .viminfo -rw-------. 1 root root 281 Jul 3 07:45 .Xauthority