Shell腳本學習

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是文件


7567917-63937ff37ac5c220.png
file操作
-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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章