代碼格式有問題,再加上英文單詞看不懂……大量的時間浪費在排錯上面了……
主要出錯位置: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