shell編程基礎---特殊符號
https://www.cnblogs.com/liang-io/p/11206307.html
if [ $? -eq 0 ]的含義
if [ $? -eq 0 ]語句代表上一個命令執行后的退出狀態
$ : 空白行
$0: shell或shell腳本的名字
$1 在shell中稱為“位置參數”,表示傳入的第1個參數(第1個入參)。
用在shell腳本主體中,表示shell腳本的第1個入參。
用在shell腳本函數里,表示函數的第1個入參。
test -z $1 是一個判斷表達式,用於判斷$1的值是否為空字符串。
若為空,則結果為true;否則為false。
$*: 以一對雙引號給出參數列表,表示所有參數組成一個字符串輸出
$@: 將各個參數分別加雙引號返回,輸出參數數組,返回多個字符串
$#: 輸出腳本接收的參數的個數
$_: 代表上一個命令的最后一個參數
$$: 代表所在命令的PID
$!: 代表最后執行的后台命令的PID
$?: 代表上一個命令執行后的退出狀態
--------------
$0 :即命令本身,相當於c/c++中的argv[0]
$1 :第一個參數.
$2, $3, $4 ... :第2、3、4個參數,依次類推。
$# 參數的個數,不包括命令本身
$@ :參數本身的列表,也不包括命令本身
$* :和$@相同,但"$*" 和 "$@"(加引號)並不同,"$*"將所有的參數解釋成一個字符串,而"$@"是一個參數數組。
---------------------------
-e filename 如果 filename存在,則為真
-d filename 如果 filename為目錄,則為真
-f filename 如果 filename為常規文件,則為真
-L filename 如果 filename為符號鏈接,則為真
-r filename 如果 filename可讀,則為真
-w filename 如果 filename可寫,則為真
-x filename 如果 filename可執行,則為真
-s filename 如果文件長度不為0,則為真
-h filename 如果文件是軟鏈接,則為真
filename1 -nt filename2 如果 filename1比 filename2新,則為真。.0
filename1 -ot filename2 如果 filename1比 filename2舊,則為真。
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
if [ ! -d ${DIR} ]; then mkdir -p ${DIR}
-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 存在且是一個套接字則為真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not則為真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的設備和節點號則為真。
[ -o OPTIONNAME ] 如果 shell選項 “OPTIONNAME” 開啟則為真。
[ -z STRING ] “STRING” 的長度為零則為真。
[ -n STRING ] or [ STRING ] “STRING” 的長度為非零 non-zero則為真。
[ STRING1 == STRING2 ] 如果2個字符串相同。 “=” may be used instead of “==” for strict POSIX compliance則為真。
[ STRING1 != STRING2 ] 如果字符串不相等則為真。
[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale則為真。
[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale則為真。
舉例1:
echo "this is the file name: $0"
echo "this is first parameter:$1"
echo "this is second prtameter:$2"
echo "this is the number of all parameter:$#"
echo "this is the the all parameter:$*"
echo "this is the the all parameter:$@"
echo "this is PID:$$"
舉例2:
#! /bin/bash
SOME_DIR='/root/cjj/'
cd $SOME_DIR
if [ $? -eq 0 ]; then # 檢查cd命令是否成功,如果成功才執行rm命令
rm -rf *txt
else 'Cannot change directory' # 如果cd命令運行失敗,則打印一個錯誤信息,並退出,返回狀態碼1
exit 1
fi
echo "yr" |passwd --stdin yr 修改yr用戶的密碼
