標籤:style blog http io ar 使用 sp strong 檔案
參考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877 通過chmod改變檔案許可權
補充知識:
1Linux檔案的三種身份和四種許可權,三種身份分別為:
- u:檔案的擁有者
- g:檔案所屬的群組
- o:其他使用者
對於每個身份,又有四種許可權,分別為:
- r:讀取檔案的許可權(read)
- w:寫入檔案的許可權(write)
- x:執行的許可權(execute)
- s:特殊許可權
2 Linux中有兩種表示檔案許可權的方式,分別為數字以及符號表示方式。
3 chmod以數字形式改變檔案許可權 :chmod 755 test.sh (解釋:讀 寫 執行 權值依次是:4 2 1 而755依次代表使用者 使用者組 其他使用者對應的權 限,將755換算成 字元形式,為rwxr-xr-x,也就是說檔案的擁有者、所屬群組 以及其他使用者都可以讀取與運行test.sh這個檔案,但是只有擁有者自己可以寫入這個文 件,也就是其他人無權修改test.sh這個檔案。(當然 root使用者無此限制,想改誰就該誰,這也是一個體現root帳號至高無上權力的體驗)
4 chmod以字元形式改變檔案許可權 :
chmod u+x test.sh 只給擁有者加上可執行許可權
chmod g+x test.sh 只給群組身份加上可執行許可權
chmod o+x test.sh 只給其他人身份加上可執行許可權
chmod a+x test.sh 給所有人都賦予x許可權
chmod o-x test.sh 如果要去掉某個身份的某個許可權,只需要將+變為-即可,例如去除其他人身份的可執行許可權:
5 shell 指令碼的編寫流程如下:
- 在編輯器中編輯 shell 指令檔。
- 將該檔案儲存為“*.sh”檔案。
- 增加指令檔的可執行許可權。 如:sudo chmod a+x test.sh(因為一般使用者沒有shell的執行許可權)
- 使用相對路徑名執行指令檔。
6編寫shell的習慣:一般情況下,最後在檔案開啟始寫上注釋.第一,因為shell有多個版本,在不同的linux作業系統下,shell是不 同的.比如,在ubuntu下是bash,所以首先表明編寫的是什麼shell指令碼,如果不知道,在終端中輸入echo $SHELL查看shell版 本.第二,寫上本shell指令碼的注釋說明,即函數的目的,參數的意義.這其實和編寫其他程式設計語言是一樣的,便於別人瞭解自己所寫指令碼打含義.
本文:
一 變數
shell 語言中可以使用變數,不過這裡的變數不同於其他的進階語言中的變數。shell 指令碼中的變數在使用時並不需要提前定義,也就是說每一個變數都可以在程式員需要時就使用。因為大部分 Linux 命令使用的是小寫字母,而大多數的 shell 中的環境變數是使用大些字母表示的。因此,在 shell 指令碼中出現的使用者自訂變數最好使用小寫字母,這樣可以很好地區別 shell 中的環境變數。可以在終端中輸入 set查看全部系統定義變數.使用 unset 命令可以刪除變數的賦值,使變數的值為空白。如果使用者需要清除一個變數的值可以這樣做,其等效於將這個變數賦值為空白。shell中指令碼變數對大叫寫敏感的,這與linux以及很多進階程式設計語言一樣的.注釋使用"#"
- 聲明變數:如name="xiao ming"
- 使用變數:如:echo $name #echo 表示輸出,$表示取name 的值.
- 運算式求值: 方式1 應該使用 expr 命令 expr 命令中可以使用數學運算子。例如,數字比較操作、整數運算操作或者邏輯操作等。方式2 在 shell 指令碼中也可以使用雙括弧代替 expr 命令計算運算式的值。其形式如下:$((運算式)) 如: expr 3+2 與$((3+2))是一樣的
- shell 指令碼中的變數很特別,因為在這裡變數並不區分類型。這一點與 C 語言以及其他的一些程式設計語言完全不同,也容易使初學者感到困惑。本質上,shell 指令碼中的變數都是字串,在對變數的解釋上則依賴於 shell 指令碼中的變數定義.
- 位置變數:在運行一個 shell 指令碼時可以向指令碼傳遞命令列參數,這些命令列參數可以在 shell 指令碼內部被引用到。根據每一個命令參數的位置,在 shell 中可以使用$1 至$9 來表示。$0 表示當前執行進程的檔案名稱,也就是程式的執行檔案名稱。
二 退 出 狀 態
exit 命令用於結束一個 shell 指令碼的運行,就像 C 語言中的調用“exit(0)”,或者在main 函數中“return 0;”一樣。shell 指令碼在結束運行時也返回一個值,並且這個值會傳遞給呼叫指令碼的父進程。這個父進程通常就是 shell,但是有些時候一些其他的使用者程式也會調用 shell 指令碼。父進程接收到這個值(其實這個值作為子進程結束狀態的一部分)後,做下一步的處理.每個 shell 命令在結束執行時都會返回一個退出狀態代碼。成功執行了該命令則返回 0;否則,不成功的命令將返回一個非零值。非零值通常都被解釋成一個錯誤碼,從慣例的角度來講返回 0 代表正常。如果返回一個非零值,則表示進程出現了異常。這時候需要根據退出狀態代碼找到進程退出的原因。通常來講程式員和系統管理員之間應當約定一個退出狀態代碼的協議,這樣便於系統管理員協助程式員發現錯誤。注意:退出狀態代碼必須是十進位數,範圍必須是 0 至 255。當指令碼以不帶參數的 exit 命令來結束時,指令碼的退出狀態代碼就由指令碼中最後執行的命令來決定。也就是 exit 之前的命令。下面執行個體示範了 shell 指令碼的退出狀態代碼的使用,該指令碼調用一個使用者編寫的簡單程式。讀者可以對比使用 exit 命令退出和不使用該命令退出的兩個版本的 shell 指令碼的區別。
三 條 件 測 試
1 條件測試命令一般有兩種格式。1 test condition 2 [ condition ] 注意:使用“[ ]”時,要在條件和“[ ]”之間加上空格。
測試檔案狀態的條件運算式很多,但是最常用幾個如下所示。
-d 檔案是否為目錄;
-s 檔案是否長度大於 0;
-f 檔案是否是普通檔案;
-L 檔案是否是符號連結;
-u 檔案是否設定了 suid 位;
-r 檔案是否可讀;
-w 檔案是否可寫;
-x 檔案是否可執行。
當條件測試的返回狀態是 0 時,則表示測試成功,否則失敗。下面執行個體測試 test.txt 檔案是否可讀、可寫和可執行檔。該指令碼中使用兩種條件測試的方法,讀者可以對照理解。
(1)在 vi 編輯器中編輯該指令碼如下:
#!/bin/sh
# file.sh 測試 test.txt 檔案是否可讀可寫可執行
#測試 test.txt 檔案的讀許可權,使用“[ ]”的方法
[ -r test.txt ]
echo $?
#測試 test.txt 檔案的寫入權限,使用“[ ]”的方法
[ -w test.txt ]
echo $?
#測試 test.txt 檔案的執行許可權,使用“[ ]”的方法
[ -x test.txt ]
echo $?
#測試 test.txt 檔案的讀許可權,使用“test 命令”的方法
test -r test.txt
echo $?
#測試 test.txt 檔案的寫入權限,使用“test 命令”的方法
test -w test.txt
echo $?
#測試 test.txt 檔案的執行許可權,使用“test 命令”的方法
test -x test.txt
echo $?
exit 0
(2)
編寫好指令碼後,
增加 shell 指令檔的可執行許可權。
可以使用 chmod 命令增加 file.sh
檔案的可執行許可權。
$ chmod u+x file.sh
(3)使用 ls 命令查看 test.txt 的許可權資訊。
$ls –l test.txt
-rw-r--r--
1
root
0
Feb
7
04:50
test.txt
(4)在 shell 中運行該 shell 指令碼如下:
0
0
1
0
0
1
運行結果說明 test.txt 檔案只有可讀寫的許可權,但是沒有可執行檔許可權。
下面執行個體測試,傳入指令碼的檔案名稱的檔案是否是普通檔案、目錄檔案和符號連結。該指令碼使用位置變數作為檔案名稱進行測試。
(1)在 vi 編輯器中編輯該指令碼如下:
#!/bin/sh
# test.sh 測試檔案的種類
#第一個檔案是一個普通檔案
[ -f $1]
echo $?
#第二個檔案是一個目錄檔案
[ -d $2]
echo $?
#第二個檔案是一個符號連結
[ -l $3]
echo $?
#啟動並執行 shell 指令碼本身也是一個普通檔案
[ -f $0]
echo $?
exit 0
(2)
編寫好指令碼後,
增加 shell 指令檔的可執行許可權。
可以使用 chmod 命令增加 test.sh
檔案的可執行許可權。
$ chmod u+x test.sh
(3)使用 mkdir 命令建立一個目錄 dir。
$mkdir dir
(4)使用 symlink 命令建立一個符號連結。
$symlink link test.txt
(5)在 shell 中運行該 shell 指令碼如下:
$./test.sh test.txt dir link
0
0
0
0
實驗結果說明每一步的測試都是成功的,每個檔案的類型都和預期的一樣。
測試時使用邏輯操作符
與 C 語言類似,shell 指令碼中同樣提供三種邏輯操作完成此功能。邏輯運算子通常和分
支語句配合使用,實現程式執行流程的不同。
-a 邏輯與,兩個運算元均為真,結果為真,否則為假。
-o 邏輯或,兩個運算元一個為真,結果為真,否則為假。
! 邏輯非,條件為假,結果為真,否則為假。
shell編程筆記1