1. 第一行必須是"#!/bin/sh"
- 它不是註釋,"#!/bin/sh"是對shell的聲明,說明你所用的是那種類型的shell及其路徑所在;
- 如果沒有聲明,則腳本將在默認的shell中執行,默認shell是由用戶所在的系統定義爲執行shell腳本的shell.
- 如果腳本被編寫爲在Kornshell ksh中運行,而默認運行shell腳本的爲C shell csh,則腳本在執行過程中很可能失敗。
- 所以建議大家就把"#!/bin/sh"當成C 語言的main函數一樣,寫shell必須有,以使shell程序更嚴密。
2. 註釋:一行開頭爲 "#"
3. 定義變量
m='memebr'
輸出m :memebr
#!/bin/bash
m='member'
echo $m
變量拼接
#!/bin/bash
m='member'
echo $m'是成員'
#!/bin/bash
m='member'
n='是成員'
echo $m$n
輸出 member是成員
4. 邏輯符號
命令1 && 命令2
如果左邊的“命令1”執行成功,那麼右邊的“命令2”纔會被執行。
命令1 || 命令2
與&&相反。如果“命令1”未執行成功,那麼就執行“命令2”。
5. 接收參數
腳本文件“test.sh”,其內容如下:
#!/bin/bash
m=$1
n=$2
echo $m-$n
執行命令:“./test.sh 111 222”;輸出 111-222
6. 控制流:if/then/elif/else/fi
注意"["和"]"前後的空格必須有,否則提示錯誤
結尾必須是fi,if 反過來 fi 相當於Java裏的Finally,這裏fi是必須的。
#!/bin/bash
myName=$1
if [ "$myName" = "superman" ];then
echo "I know you!"
else
echo "Nice to see you!"
fi
執行命令:“./test.sh superman ”;輸出 I know you!
示例:判斷文件
if [ -e './test.sh' ];then
echo './test.sh''是文件'
else
echo './test.sh''不是文件'
fi
執行命令:“./test.sh ”;輸出 ./test.sh是文件
#!/bin/bash
fileName=$1
if [ -e './'$fileName ];then
echo $fileName'是文件'
else
echo $fileName'不是文件'
fi
執行命令:./test.sh test.sh 輸出 test.sh是文件
-b file 檢測文件是否是塊設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是否是字符設備文件,如果是,則返回 true。 [ -c $file ] 返回 false。
-d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是否設置了 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是否設置了粘着位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是否是具名管道,如果是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是否設置了 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執行,如果是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。
7. 循環:for/do/done
注意:循環項是以“空格”拆分的字符串,類似Java的split
name="super man "
for loop in $name; do
echo $loop;
done
執行命令:“./test.sh ”;輸出 super \n man
8. 格式化輸出日期
curdate="`date +%Y%m%d%H%M%S`"
echo $curdate
執行命令:“./test.sh ”;輸出 20180323150142
time=$(date +%m-%d--%H:%M:%S)
echo "時間:$time"
執行命令:“./test.sh ”;輸出 時間:03-23--15:02:29
9. 系統變量
pwd=$PWD # 當前目錄
user=$USER # 當前用戶
echo $pwd
echo $user
執行命令:“./test.sh ”;輸出 /Users/superman/Desktop /n superman