如同其他語言一樣,通過我們使用任意一種文字編輯器,比如 nedit、kedit、emacs
、vi 等來編寫我們的 shell 程式。程式必須以下面的行開始(必須方在檔案的第一行):
#!/bin/sh
符號#!用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使
用/bin/sh 來執行程式。
當編輯好指令碼時,如果要執行該指令碼,還必須使其可執行。
要使指令碼可執行:
chmod +x filename
然後,您可以通過輸入: ./filename 來執行您的指令碼。
在其他程式語言中您必須使用變數。在 shell 程式設計中,所有的變數都由字串組成,
並且您不需要對變數進行宣告。
>>本地變數
設定變數
引用變數
清除變數
檢視變數
>>環境變數
設定環境變數:
• 引用環境變數 :
• 常用環境變數
– home
– path
– term
– uid
– pwd
– ps1
>>特殊的預定義變數
$#:儲存shell程式中命令列引數的個數
$?:儲存shell中上乙個程式執行的返回值(0表 示命
令執行成 功,非0有問題)
$0:儲存shell程式自己的名稱
$[1-n]:儲存第[1-n]個命令列引數∗:
儲存sh
ell腳
本的所有
引數(不
包含0)$$:儲存shell指令碼的程序號(pid)
$!:儲存上乙個後台執行命令的程序號(pid)
通過乙個簡單的test.sh指令碼來學習:
12
3
4
5
6
#!/bin/sh
echo
"number:$#"
echo
"scname:$0"
echo
"first :$1"
echo
"second:$2"
echo
"argume:$@"
執行指令碼:
12
3
4
5
6
# ./test.sh aa bb
number:2
scname:.
/test02
.sh
first :aa
second:bb
argume:aa bb
通過顯示結果可以看到:
$# 是傳給指令碼的引數個數
$0 是指令碼本身的名字
$1是傳遞給該shell指令碼的第乙個引數
$2是傳遞給該shell指令碼的第二個引數
$@ 是傳給指令碼的所有引數的列表
echo "some text": 將文字內容列印在螢幕上
ls: 檔案列表
wc -l filewc -w filewc -c file&: 計算檔案行數計算檔案中的單詞數計算檔案中
的字元數
cp sourcefile destfile&: 檔案拷貝
mv oldname newname : 重新命名檔案或移動檔案
rm file&: 刪除檔案
grep 'pattern' file&: 在檔案內搜尋字串比如:grep 'searchstring'
file.txt
cut -b colnum file&: 指定欲顯示的檔案內容範圍,並將它們輸出到標準輸出裝置
比如:輸出每行第 5 個到第 9 個字元 cut -b5-9 file.txt 千萬不要和 cat 命令混淆,這是兩
個完全不同的命令
cat file.txt: 輸出檔案內容到標準輸出裝置(螢幕)上
file somefile&: 得到檔案型別
read var: 提示使用者輸入,並將輸入賦值給變數
sort file.txt: 對 file.txt 檔案中的行進行排序
expr: 進行數**算 example: add 2 and 3expr 2 "+" 3
find: 搜尋檔案比如:根據檔名搜尋 find . -name filename -print
tee: 將資料輸出到標準輸出裝置(螢幕) 和檔案比如:somecommand | tee outfile
basename file&: 返回不包含路徑的檔名比如: basename /bin/tux 將返回 tux
dirname file&: 返回檔案所在路徑比如:dirname /bin/tux 將返回 /bin
head file&: 列印文字檔案開頭幾行
tail file : 列印文字檔案末尾幾行
sed: sed 是乙個基本的查詢替換程式。可以從標準輸入(比如命令管道)讀入文字
,並將結果輸出到標準輸出(螢幕)。該命令採用正規表示式(見參考)進行搜尋。不
要和 shell 中的萬用字元相混淆。比如:將 linuxfocus 替換為 linuxfocus :cat
text.file | sed 's/linuxfocus/linuxfocus/' > newtext.file
"if" 表示式 如果條件為真則執行 then 後面的部分:
if ....; then
....
elif ....; then
....
else
....
fi大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字串、判斷
檔案是否存在及是否可讀等等...
通常用" [ ] "來表示條件測試。注意這裡的空格很重要。要確保方括號的空格。
[ -f "somefile" ] :判斷是否是乙個檔案
[ -x "/bin/ls" ] :判斷/bin/ls 是否存在並有可執行許可權
[ -n "var
"]:判
斷var 變數是否有值
[ "a
"="b" ] :判斷a
和b 是否相等
乙個函式是這個樣子的
:functionname()
任何優秀的指令碼都應該具有幫助和輸入引數。
最簡單的除錯命令當然是使用 echo 命令。
可以使用 echo 在任何懷疑出錯的地方列印任何變數值。
shell 也有乙個真實的除錯模式。如果在指令碼"strangescript" 中有錯誤,您可以這
樣來進行除錯:
sh -x strangescript
這將執行該指令碼並顯示所有變數的值。
shell 還有乙個不需要執行指令碼只是檢查語法的模式。可以這樣使用:
sh -n your_script
這將返回所有語法錯誤。
shell中條件判斷if中的-z到-d的意義
[ -a file ] 如果 file 存在則為真。
[ -b file ] 如果 file 存在且是乙個塊特殊檔案則為真。
[ -c file ] 如果 file 存在且是乙個字特殊檔案則為真。
[ -d file ] 如果 file 存在且是乙個目錄則為真。
[ -e file ] 如果 file 存在則為真。
[ -f file ] 如果 file 存在且是乙個普通檔案則為真。
[ -g file ] 如果 file 存在且已經設定了sgid則為真。
[ -h file ] 如果 file 存在且是乙個符號連線則為真。
[ -k file ] 如果 file 存在且已經設定了粘制位則為真。
[ -p file ] 如果 file 存在且是乙個名字管道(f如果o)則為真。
[ -r file ] 如果 file 存在且是可讀的則為真。
[ -s file ] 如果 file 存在且大小不為0則為真。
[ -t fd ] 如果檔案描述符 fd 開啟且指向乙個終端則為真。
[ -u file ] 如果 file 存在且設定了suid (set user id)則為真。
[ -w file ] 如果 file 如果 file 存在且是可寫的則為真。
[ -x file ] 如果 file 存在且是可執行的則為真。
[ -o file ] 如果 file 存在且屬有效使用者id則為真。
[ -g file ] 如果 file 存在且屬有效使用者組則為真。
[ -l file ] 如果 file 存在且是乙個符號連線則為真。
[ -n file ] 如果 file 存在 and has been mod如果ied since it was last read則為真。
[ -s file ] 如果 file 存在且是乙個套接字則為真。
Shell指令碼(三) Shell指令碼入門
1 指令碼格式 指令碼以 bin bash開頭 指定解析器 2 第乙個shell指令碼 helloworld 1 需求 建立乙個shell指令碼,輸出helloworld 2 案例實操 atguigu hadoop101 datas touch helloworld.sh atguigu hadoo...
shell 指令碼入門
shell 是乙個用 c 語言編寫的程式,它是使用者使用 linux 的橋梁。shell 既是一種命令語言,又是一種程式語言。shell 是指一種應用程式,這個應用程式提供了乙個介面,使用者通過這個介面訪問作業系統核心的服務。ken thompson 的 sh 是第一種 unix shell,win...
shell指令碼入門
str wxz echo 輸出 3 提取子字串 以下例項從字串第 2 個字元開始擷取 4 個字元 string the shell script is great echo 輸出 he s查詢子字串 查詢字元 i 或 s 的位置 string runoob is a great company ec...