標籤:shell、指令碼編程
指令碼注釋:
在shell指令碼中,跟在(#)號後面的內容表示注釋,用來對指令碼進行注釋說明,注釋部分不會被執行,注釋可自成一行,也可以跟在指令碼命令後面與命令在同一行。開發指令碼時,如果沒有注釋,其他人就很難理解指令碼究竟在做什麼,時間長了自己也會忘記。因此,我們要發發盡量養成為所做的工作(指令碼等)書寫注釋習慣,不光是方便別人,也方便自己。否則,寫完一個指令碼後也許幾天后就記不起指令碼的用途了,在重新閱讀也會浪費很多寶貴時間。
指令碼的執行
Shell指令碼的執行通常可以採用以下三種方式:
1) Bash script-name或sh script-name
2) Path/script-name或./script-name(當前路徑下執行指令碼)
3) Source script-name或 .script-name
執行說明:
第一種方法是當指令檔本身沒有可執行許可權時常使用的方法,這裡推薦用bash執行。
第二種方法需要先將指令檔的許可權改為可執行,具體方法:chmod u+x script-name 或 chmod 755script-name。然後通過指令碼路徑就可以直接執行指令碼了。
在生產環境中,不少讀者在寫完了shell指令碼後,由於忘記給指令碼執行許可權,就直接應用了,結果導致指令碼沒有按自己的意願手動或定時執行,這一點請讀者注意,避免方法就是用第一種方法替代第二咱方法。
第三種方法通過是使用source或者”.”號讀入或載入指定的shell指令檔,然後,依次執行指定shell指令檔中的所有語句。使用source或者“.”號可以將自身指令碼中的變數的值或函數等的傳回值傳遞到當前的父指令碼使用。這是與前面兩種方法的最大區別。
下面我們舉例說明:
第一種方法:
[[email protected]]# cat >test.sh
echo ‘I amsky9899‘
[[email protected]]# cat test.sh
echo ‘I amsky9899‘
[[email protected]]# sh test.sh
I amsky9899
[[email protected]]# bash test.sh
I amsky9899
第二種方法:
[[email protected]]# ls -l test.sh
-rw-r--r--.1 root root 20 2月 103:23 test.sh
[[email protected]]# ./test.sh
bash:./test.sh: 許可權不夠
[[email protected]]# chmod u+x test.sh
[[email protected]]# ls -l test.sh
-rwxr--r--.1 root root 20 2月 103:23 test.sh
[[email protected]]# ./test.sh
I amsky9899
第三種方法:
[[email protected]]# source test.sh
I amsky9899
[[email protected]]# . test.sh
I amsky9899
echo ‘I am sky9899‘
[[email protected] sky]# echo ‘userdir=`pwd`‘ > testsource.sh
[[email protected] sky]# cat testsource.sh
userdir=`pwd`
[[email protected] sky]#sh testsource.sh
[[email protected] sky]#echo $userdir
#此處為空白,並沒有出現當前路徑。
根據上面例子,我們可以發現,通過sh或bash命令執行過的指令碼,指令碼結束後在當前shell視窗查看userdir變數的值, 發現值是空的。現在以同樣步驟改用source執行,然後在看看userdir變數的值。
[[email protected] sky]# source testsource.sh
[[email protected] sky]# echo $userdir
/home/sky
注意:通過source或”.”點號載入執行過的指令碼,在指令碼結束後指令碼中的變數值在當前shell中依然存在,而sh和bash則不行。因此,在做shell指令碼開發時,如果指令碼中有需求引用其他指令碼的內容或者設定檔時,最好用”.”點號或source在指令碼開頭載入該指令碼或設定檔,然後在下面的內容可以用調用 source載入的指令碼及檔案中的變數及函數等內容。
Linux營運職位實際面試筆試填空題(3)
[[email protected] sky]# cat test.sh
User=`whoami`
[[email protected] sky]# sh test.sh
[[email protected] sky]# echo $user
問:執行echo $user命令的結果是什嗎?
答案:
1) 目前使用者
2) Sky
3) 空(無內容)
Shell指令碼開發基本規範及習慣
1) 開頭指定指令碼解譯器
#!/bin.sh或#!/bin/bash
2) 開頭加版本著作權等資訊
#Date:
#Author:
#Mail:
#Function:
#Version:
3) 指令碼中不用中文注釋:
盡量用英文注釋,防止本機或切換系統內容後中文亂碼的困擾。
4) 指令碼以.sh為副檔名:
Script-name.sh
5) 代碼書寫優秀習慣:
{ }、[ ]、‘’、` `、“ “
本文出自 “Linux~DBA~MBA” 部落格,請務必保留此出處http://sky9896.blog.51cto.com/2330653/1610345
shell指令碼編程一