一、位置變數:
$0 擷取當前執行指令碼的檔案名稱,包括指令碼路徑。
$n 擷取當前執行指令碼的第n個參數,1~9,大於9,用{}括起來,比如:${10}。
$# 表示參數個數
seq 9|sed 's#[0-9]#$&#g'seq -s " $" 1 10 | sed 's/1/$1/'
以上用兩種方法用產生“$1 $2一直到$10 ”用到了一個函數seq,下面對這個函數進行介紹。
用法:seq [選項]… 尾數
或:seq [選項]… 首數 尾數
或:seq [選項]… 首數 增量 尾數
以指定增量從首數開始列印數字到尾數。 -f, –format=格式 使用printf 樣式的浮點格式 -s, –separator=字串 使用指定字串分隔數字(預設使用:\n) -w, –equal-width 在列前添加0 使得寬度相同 –help 顯示此協助資訊並退出 –version 顯示版本資訊並退出
如果省略了首數或者增量,則預設其值為1,即使這樣尾數仍小於首數。
首數、增量和尾數均以浮點數形式解釋。當首數小於尾數時增量一般為正值,
相反在首數大於尾數時增量一般為負數。
指定的格式必須適用於顯示”double”類型的參數;當首數、增量和尾數均為指定
精確度的定點十進位數時預設為”%.精確度f”,否則預設為”%g”。
$ seq 1000 #起始預設是 1,間隔預設也是1$ seq 2 100 #從2列印到100,間隔預設是1$ seq 1 3 10 #從1到10,間隔為3,結果是:1 4 7 10$ seq -s " $" 1 10 #以 $作為分隔字元列印1~10
關於sed函數的用法可參考 :
http://blog.csdn.net/qicheng777/article/details/70847365
運行一個簡單的shell程式 來觀察$0以及$#具體含義:
二、進程狀態命令:
1、\$? 擷取上一個指令的傳回值。
一般用於判斷上一個命令是否執行成功,如果成功為0。下面是$?的傳回值:
傳回值 |
含義 |
0 |
表示運行成功 |
2 |
許可權拒絕 |
1~125 |
運行失敗,指令碼命令、系統命令錯誤或參數傳遞錯誤 |
126 |
找到命令但是無法執行 |
127 |
未找到要啟動並執行命令 |
>128 |
命令被系統強制結束 |
執行個體:
[yangni@centos6 shell]$ find -aafind: unknown predicate `-aa'[yangni@centos6 shell]$ echo $? 1 //參數錯誤 [yangni@centos6 shell]$ maek -bash: maek: command not found[yangni@centos6 shell]$ echo $?127 //命令未找到[yangni@centos6 shell]$ ./a.sh-bash: ./a.sh: Permission denied[yangni@centos6 shell]$ echo $?126 //找到命令,無法執行[yangni@centos6 shell]$ lsa.sh[yangni@centos6 shell]$ echo $?0 //成功執行返回0
2、$$ 擷取當前shell進程號。
寫一個死迴圈來測試:
#!/bin/bashecho $$ > a.log while truedo uptime sleep 2done
其他一些狀態命令:
$! 執行上一個指令的PID$_ 在之前執行的命令或指令碼的最後一個參數$* 將所有參數視為單個字串$@ 這個程式的所有參數,這是把參數傳給其他程式的 最佳方式
$*和$@的區別:
$* 將所有參數視為單個字串
$@ 這個程式的所有參數,這是把參數傳給其他程式的
最佳方式
如果帶引號:"$1$2$3" 單個參數$@ 這個程式的所有參數,這是把參數傳給其他程式的 最佳方式"$1" "$2" "$3" 三個參數如果不加引號,列印出來就不一樣