1. 程式人生 > >shell練習題之bash知識點(for循環、if判斷語句結構練習)

shell練習題之bash知識點(for循環、if判斷語句結構練習)

bash相關、

bash知識點:文件測試
[ ]
[[ ]]
test
單目測試:
-e file :測試文件是否存在
-a file :測試文件是否存在
-f file: 測試是否為普通文件
-d 目錄: 測試是否為目錄文件
-h file: 測試是否為鏈接文件
-r somefile: 測試其有效用戶是否對此文件有讀取權限
-w somefile: 測試其有效用戶是否對此文件有寫權限
-x somefile: 測試其有效用戶是否對此文件有執行權限

-b somefile : 測試文件是否存在並且是否為一個塊設備文件
-c somefile : 測試文件是否存在並且是否為一個字符設備文件
-h|-L somefile : 測試文件是否存在並且是否為符號鏈接文件
-p somefile : 測試文件是否存在並且是否為管道文件:
-S somefile : 測試文件是否存在並且是否為套接字文件:
-s somefile:  測試文件是否存在並且不空

雙目測試:
file1 -nt file2 :測試file1是否比file2更 新一些
file1 -ot file2 :測試file1是否比file2更 老一些

在腳本中使用source命令倒入別的文件
[ -r 配置文件 ] && cource 配置文件

bash的知識點:位置參數輪替
shift

練習題:
一、編輯一個腳本,判斷/tmp目錄下有沒有1這個目錄,如果有就退出,如果沒有就創建目錄1
1)在命令行執行以下命令:
fileName=/tmp/1
[ -e $fileName ] || mkdir $fileName


解釋:1.使用變量fileName=/tmp/1
2.[ ]中括號裏面-e表示 :如果目錄/tmp下有目錄1則為true(真);否則為false(假)

3.為true(真)則不執行後面的mkdie $fileName,為false(假)則執行

二、編寫一個可調用.conf配置文件的腳本
2.1首先在/tmp/scripts目錄下創建一個.conf配置文件
[root@localhost scripts]# vim myscripts.conf

userName=tom
fileName=/etc/passwd

2.2開始編寫myscripts.sh腳本
[root@localhost scripts]# vim myscripts.sh
#!/bin/bash
source /tmp/scripts/myscripts.conf
echo $userName

**2.3給myscripts.sh腳本加定義***


#!/bin/bash
#configfile:/temp/scripts/myscripts.conf
[ -r /tmp/scripts/myscripts.conf ] && source /tmp/scripts/myscripts.conf #source可以用.表示
userName=${userName=Jerry}
echo $userName


解釋:1.創建myscripts.conf配置文件
2.使用vim編輯myscripts.sh腳本
3.添加註釋,配置文件目錄路徑,
4.使用[ -r 文件絕對路徑 ]來判斷文件是否存在,#-r 表示當前用戶是否對文件有讀權限
5.如果前面為true(真)那麽使用source或.調用myscripts.conf配置文件,並將myscripts.conf中的userName變量內容輸出
6.如果前面為false(假),後面就忽略;直接打印腳本內定義的變量內容(輸出內容: Jerry)

三、編寫一個腳本,將/var/log拷貝到/tmp/logs
在編寫腳本之前我們可以做個小測試:
[root@localhost scripts]# which wget
/usr/bin/wget
[root@localhost scripts]# echo $?
0


解釋:利用wich wget判定這個wget這個命令存不存在

創建腳本vim download.sh 編寫完使用-n檢查下腳本語法(sh -n download.sh)
[root@localhost scripts]# vim download.sh

#!/bin/bash
url=‘ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe‘
which wget &> /dev/null || exit 5
downloader=which wget
[ -x$downloader ] || exit 6
$downloader $url


解釋:1.添加一個url
2.利用which判定wget存不存在,將結果輸出到空(>/dev/null);不存在即退出。
3.使用變量downloader定義為which wget
4.然後利用[ -x ]來判定當前用戶是否對downloader有執行權限,沒有則退出
5.執行$downloader $url(效果等於wget ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe)

四、寫一個腳本,完成以下任務:
1.分別復制/var/log下的文件復制到/tmp/logs目錄中
2.復制目錄時,才使用cp -r
3.復制文件時,使用cp
4.復制鏈接文件,使用cp -d
5.如果是其他文件,使用cp -a

[root@localhost scripts]# vim cplog.shs

 copyCommand=‘cp‘

elif [ -f $fileName ]; then
#!/bin/bash
#
targetDir=‘/tmp/logs‘

[ -e $targeDir ] || mkdir $targeDir
for fileName in /var/log/*;do
if [ -d $fileName ]; then
copyCommand=‘cp -r‘
elif [ -f $fileName ]; then
copyCommand=‘cp‘
elif [ -h $fileName ]; then
copyCommand=‘cp -d‘
else
copyCommand=‘cp -a‘
fi

$copyCommand $fileName $targetDir
done


解釋:1.編輯變量目標目錄(targetDir)
2.判斷目標目錄是否存在,不存在則創建
3.for循環語句(將/var/log下面所有文件拷貝)
4.if判斷語句([ -d ]對應目錄文件,[ -f ]對應普通文件,[ -h ]對應鏈接文件,[ -a ]對應其他文件
5.將變量按照先後循序排列(拷貝命令 文件 目標目錄)
~
~
~
~
~
~
五、編寫一個腳本,完成以下任務
script.sh {start|stip|restart|status}
如果為空,則顯示幫助信息 script.sh {start|stip|restart|status}

shell練習題之bash知識點(for循環、if判斷語句結構練習)