1. 程式人生 > >Shell 程式設計 shell 指令碼編寫

Shell 程式設計 shell 指令碼編寫

原創轉載自 自海牛部落-青牛,http://hainiubl.com/topics/173

1 Vim 編輯器

1.1 vim 常用命令

file

file

file

1.2 針對程式設計師的vim 配置
配置方式:
/etc/vimrc 全域性配置
~/.vimrc 使用者級配置
~/.viminfo 自動記錄編輯檔案的游標位置、搜尋詞等等

常用配置:
set nu 開啟顯示行號
set nonu 關閉顯示行號
set autoindent 開啟自動縮排排版
set noautoindent 關閉自動縮排排版
syntax on 開啟語法高亮
syntax off 關閉語法高亮
set ts=4 使用4個空格替換tab
set expandtab
set bg=dark 或 set bg=light 設定顏色方案,預設是light

file

2 第一個程式:HelloWorld#

file

其中:
第一行:#! 開頭,指定指令碼的執行環境。
第二行:#開頭,養成良好的註釋習慣,這裡一般說明指令碼功能、作者、修改歷史等等
echo ,把其引數傳遞給標準輸出。

執行指令碼需要 hello 檔案有執行許可權,設定hello 檔案的執行許可權

file

3 變數和運算子#

3.1 變數賦值和使用

file

其中:
1)變數名首字元必須為字母,名字只能用字母、數字、下滑線,不要用bash關鍵字。非法的名字:8var、var-8
2)變數定義或賦值時,變數名與值之間用等號連線:變數名=值,等號兩邊不能有空格,值中有空格或特殊字元需要用雙引號或單引號引起來。
3)使用 $變數名 或 ${變數名} 形式獲取變數值

file

3.2 變數替換
美元符號$ ,如果想輸出$ 符號,則要用“\” 進行轉義。
示例:
var1 檔案內容如下

file

file

file

file

file

3.4 bush 引號規則
1)單引號‘’:單引號裡面的所有字元都是普通字元。
2)雙引號“”:雙引號會保留變數特性,用值替換。
3)倒引號··:位於Esc 鍵下方,用倒引號括起一個命令時,這個命令將會被執行,執行後的結果作為這個表示式的值。

file

file

3.5.2 陣列使用
獲取陣列長度:用${#陣列名[@或]} 可以得到陣列長度
${#arr[
]} 或 ${#arr[@]}

讀取陣列元素:
讀取下標為1的元素:${arr[1]}

讀取陣列整個元素:${arr[*]}

給陣列元素賦值:
arr[1]=1

刪除陣列元素:
刪除後,陣列長度改變
unset arr[1]
${#arr[*]}

陣列切片:
直接通過 ${陣列名[@或*]:起始位置:長度} 切片原先陣列,返回是字串,中間用“空格”分開。
${arr[@]:0:2}

如果加上”()”,將得到切片陣列

c=(${arr[@]:0:2})
${c[*]}

file

file

file

其中:
$(()) 方式:內部不允許有空格
$[] 方式:內部一定要有空格。
expr 方式:expr 的表示式要用倒引號括起來

file

3.6.2 比較運算子
3.6.2.1 數字比較

file

注意:
[[]] 方式:可以直接用不需要轉義,轉義也不錯。
[[ 2 -eq 2 ]] && echo 'ok' 與 [[ 2 == 2 ]] && echo 'ok' 是等效的。

file

file

示例:
test "aaa" == "aaa" && echo 'ok'
[ "aaa" == "aaa" ] && echo 'ok'
[[ "aaa" == "aaa" ]] && echo 'ok'

file

file

示例:
test ! 3 -eq 4 && echo 'ok'
[ ! 3 -eq 4 ] && echo 'ok'
[[ ! 3 == 4 ]] && echo 'ok'

file

file

示例:
如果f4 是檔案則顯示ok
[[email protected] shelltest]# test -f f4 && echo 'ok'
ok
[[email protected] shelltest]# [ -f f4 ] && echo 'ok'
ok
[[email protected] shelltest]# [[ -f f4 ]] && echo 'ok'
ok

file

file

file

file

file

file

file

file

示例:
從鍵盤接收使用者名稱,
如果使用者名稱等於“aaa” ,則歡迎aaa

如果使用者名稱等於“bbb” ,則歡迎bbb

否則輸出使用者名稱不存在

file

file

file

示例:
根據鍵盤輸入的命令,執行相應命令。
如:ll : ls - l
la: ls -a
lrt : ls -lrt
其他:ls

file

file

file

file

file

file

file

file

迴圈條件為真(值為非0)執行迴圈體;
迴圈條件為假(值為0)退出迴圈體;