Bash Shell編程初學基礎篇之一
說明: 本文僅供初學Linux Bash shell學員參考學習,大神們如有興趣請批評指正?。?!
相信對于很多Linux初學者或者僅僅是聽說Linux還沒有接觸過的同學會有一種神秘感或者不敢碰觸的感覺,今天就幫大家揭開它的神秘面紗,其實并沒有那么深不可測,只要你敢,你有決心去下工夫看完以下內容(是時候該逼自己下決心去做一些事情了?。。。?。廢話少說,浪費大家寶貴時間。
概述: 以下主要從Bash腳本的格式,變量,基本運算語法和實例來講解;每個實例都保證運行測試通過,然后截屏與大家分享;大家通過一些簡單的實例相信會很快上手,不要灰心,要相信自己;人和人之間的差距就在于用心去做。
基本內容:
-
Shell腳本的基本格式:
-
用vim等編輯器新建一個bash.sh的文本文件,第一行以#!/bin/bash開頭即可。
-
一個規范的Shell的基本格式如下:
#!/bin/bash # Description :test # Version 0.0.1 # Author:zgq # Date :time
第一行是標準格式,我們在此處僅針對Bash來說,必須這樣寫,任何一門語言都有其規范;第二行Description簡單描述一下Shell的基本功能,第三行Version版本信息,第四行Author:作者信息,第五行Date:日期時間。除了第一行,其他以#開頭的行均為注釋信息,會被解釋器忽略。
希望大家在以后實現腳本功能之后將此信息補充完整,存在既有其將來被用到的一天。
實例:新建一個腳本/tmp/test.sh實現如下功能:
1) 新建一個用戶magedu,
2)創建目錄/tmp/hellobash
3)復制/etc/rc.d/init.d/functions至/tmp/hellobash中
大家動手新建這個一個簡單的腳本,熟悉一下其基本的寫法規范。其實Shell腳本是一個過程式編程語言,把常用的Shell命令按順序羅列起來就是一個腳本。
腳本寫完了,我們怎么去執行它呢?
首先用ll命令看一下此腳本是沒有執行權限的,用chmod +x /tmp/test.sh
賦予執行權限;然后用bash –n test.sh 此功能是語法測試,如果沒有任何結果則是最好的結果,bash –x test.sh 單步執行顯示其運行過程結果;
或者我們直接bash test.sh 執行腳本。
-
變量概述:
Bash變量名稱命令規則:
a)只能包含字母、數字和下劃線,并且不能以數字開頭;
b)不能與系統中環境變量重名
c)見名知意
Bash變量賦值和撤銷:
Bash屬于弱類型語言,任何變量無需事先聲明,可直接使用,值默認都是字符型;
格式 變量=值
例如: a=abc
declare -i varname=0
變量撤銷: unset varname
變量類別:
本地變量:作用域為整個bash進程
環境變量:作用域為當前shell進程及其子進程
局部變量:作用域只對當前代碼段有效
位置變量:$1,,,$n,${10} ,,,,,
特殊變量:
$?:狀態返回值
$#:傳遞給腳本參數的個數
$*:顯示所有的參數
$@:引用傳遞給腳本的所有參數
實例: 寫一個腳本如下
執行結果解析:在腳本后面輸入了4個參數,那么$1的值為1,$2的值為2,$*的值為所有參數值,$#的值為參數的個數4個,$@的值是所有參數的值,$0的值為返回腳本的名稱,$?的值為此腳本執行狀態的返回值0,腳本執行成功的狀態返回值為0,如果腳本執行錯誤會返回1-255的值;
實例擴展:寫一個如下腳本運行
結果分析:輸入四個參數,$1的返回值為1,$2的返回值為3,$*的返回值為3和4,所有參數的值(可以理解為一共四個參數,兩個shift,所以把左邊兩個參數值釋放),$#返回參數的個數2個。由以上結果可以得出shift [n]的作用是把左邊n個參數的值釋放掉;
Bash基本運算:
Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。expr 是一款表達式計算工具,使用它能完成表達式的求值操作
1、算術運算:
+ |
加法 |
`expr $a + $b` 結果為 30。 |
– |
減法 |
`expr $a – $b` 結果為 10。 |
* |
乘法 |
`expr $a \* $b` 結果為 200。 |
/ |
除法 |
`expr $b / $a` 結果為 2。 |
% |
取余 |
`expr $b % $a` 結果為 0。 |
= |
賦值 |
a=$b 將把變量 b 的值賦給 a。 |
== |
相等。用于比較兩個數字,相同則返回 true。 |
[ $a == $b ] 返回 false。 |
!= |
不相等。用于比較兩個數字,不相同則返回 true。 |
[ $a != $b ] 返回 true。 |
乘號(*)前邊必須加反斜杠(\)才能實現乘法運算;
實例:
執行結果如下:
2、關系運算
關系運算符只支持數字,不支持字符串,除非字符串的值是數字。
運算符 |
說明 |
舉例 |
-eq |
檢測兩個數是否相等,相等返回 true。 |
[ $a -eq $b ] 返回 true。 |
-ne |
檢測兩個數是否相等,不相等返回 true。 |
[ $a -ne $b ] 返回 true。 |
-gt |
檢測左邊的數是否大于右邊的,如果是,則返回 true。 |
[ $a -gt $b ] 返回 false。 |
-lt |
檢測左邊的數是否小于右邊的,如果是,則返回 true。 |
[ $a -lt $b ] 返回 true。 |
-ge |
檢測左邊的數是否大等于右邊的,如果是,則返回 true。 |
[ $a -ge $b ] 返回 false。 |
-le |
檢測左邊的數是否小于等于右邊的,如果是,則返回 true。 |
[ $a -le $b ] 返回 true。 |
執行結果如下:
字符串運算:
運算符 |
說明 |
舉例 |
= |
檢測兩個字符串是否相等,相等返回 true。 |
[ $a = $b ] 返回 false。 |
!= |
檢測兩個字符串是否相等,不相等返回 true。 |
[ $a != $b ] 返回 true。 |
-z |
檢測字符串長度是否為0,為0返回 true。 |
[ -z $a ] 返回 false。 |
-n |
檢測字符串長度是否為0,不為0返回 true。 |
[ -n $a ] 返回 true。 |
str |
檢測字符串是否為空,不為空返回 true。 |
[ $a ] 返回 true。 |
執行結果如下:
布爾運算符
運算符 |
說明 |
舉例 |
! |
非運算,表達式為 true 則返回 false,否則返回 true。 |
[ ! false ] 返回 true。 |
-o |
或運算,有一個表達式為 true 則返回 true。 |
[ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a |
與運算,兩個表達式都為 true 才返回 true。 |
[ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
執行結果如下:
文件測試運算符列表:
操作符 |
說明 |
舉例 |
-b file |
檢測文件是否是塊設備文件,如果是,則返回 true。 |
[ -b $file ] 返回 false。 |
-c file |
檢測文件是否是字符設備文件,如果是,則返回 true。 |
[ -b $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。 |
執行結果如下:
好了,時間緊,就先說到這里,有不完整和補充的地方希望大家指正。接下來有時間在說Shell的基本語法格式條件語句:if,case,循環語句:for while,until.希望大家有好的意見和建議并批評指正!??!我們一點一滴的去慢慢穩扎穩打,相信有一天你會成為你想成為的人?。?!
原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/1974
有理論有實戰,不錯。 格式上稍亂了些,雖然了些調整,整體效果還不是特別理想。另: 如果加上標簽seo的效果會非常好
@stanley:多謝指點,在word中寫的,然后粘貼到博客里面,表格的大小無法調整,后續繼續努力,請多指教!