【夯實shell基礎】shell基礎面面觀,shell面面觀
【夯實shell基礎】shell基礎面面觀,shell面面觀
本文地址
分享提綱:
1. shell中的函數
2. shell中的數組
3. shell中的變量
4. shell中的運算符
5. Linux的一些命令
1. shell中的函數
1.1)【定義shell函數(define function)】
[ function ] funname [()]
{
action;
[return int;]
}
說明:
- 1、可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
- 2、參數返回,可以顯示加:return 返回,如果不加,將以最後一條命令運行結果,作為返回值。 return後跟數值n(0-255
實例(testfun1.sh):

![]()
1 #!/bin/sh
2
3 fSum 3 2;
4 function fSum()
5 {
6 echo $1,$2;
7 return $(($1+$2));
8 }
9 fSum 5 7;
10 total=$(fSum 3 2);
11 echo $total,$?;
12
13 sh testfun1.sh
14 testfun1.sh: line 3: fSum: command not found
15 5,7
16 3,2
17 1
18 5
testfun1.sh
從上面這個例子我們可以得到幾點結論:
- 1、必須在調用函數地方之前,聲明函數,shell腳本是逐行運行。不會像其它語言一樣先預編譯。一次必須在使用函數前先聲明函數。
- 2、total=$(fSum 3 2); 通過這種調用方法,我們清楚知道,在shell 中 單括號裡面,可以是:命令語句。 因此,我們可以將shell中函數,看作是定義一個新的命令,它是命令,因此 各個輸入參數直接用 空格分隔。 一次,命令裡面獲得參數方法可以通過:$0…$n得到。 $0代表函數本身。
- 3、函數返回值,只能通過$? 系統變量獲得,直接通過=,獲得是空值。其實,我們按照上面一條理解,知道函數是一個命令,在shell獲得命令返回值,都需要通過$?獲得。
1.2)【函數作用域,變量作用范圍】
先我們看一個實例(testfun2.sh ):

![]()
1 #!/bin/sh
2
3 echo $(uname);
4 declare num=1000;
5
6 uname()
7 {
8 echo "test!";
9 ((num++));
10 return 100;
11 }
12 testvar()
13 {
14 local num=10;
15 ((num++));
16 echo $num;
17
18 }
19
20 uname;
21 echo $?
22 echo $num;
23 testvar;
24 echo $num;
25
26 sh testfun2.sh
27 Linux
28 test!
29 100
30 1001
31 11
32 1001
testfun2.sh
我們一起來分析下上面這個實例,可以得到如下結論:
- 1、定義函數可以與系統命令相同,說明shell搜索命令時候,首先會在當前的shell文件定義好的地方查找,找到直接執行。
- 2、需要獲得函數值:通過$?獲得
- 3、如果需要傳出其它類型函數值,可以在函數調用之前,定義變量(這個就是全局變量)。在函數內部就可以直接修改,然後在執行函數就可以讀出修改過的值。
- 4、如果需要定義自己變量,可以在函數中定義:local 變量=值 ,這時變量就是內部變量,它的修改,不會影響函數外部相同變量的值 。
2. shell中的數組
2.1)【數組的定義】
兩種方法
arr=(1 2 3 4 5) # 注意是用空格分開,不是逗號!!
和
array
array[0]="a"
array[1]="b"
array[2]="c"
2.2)【數組的遍歷】
for var in ${ arr[@] };
do
echo $var
done
2.3)【數組其他】
-- 【讀取數組】
valuen=${array_name[n]} #獲取單個元素
echo ${array_name[@]} #獲取所有元素
# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}
3. shell中的變量
3.1)定義
your_name="runoob.com"
-- 不能有空格
--可以使用表達式賦值
for file in `ls /etc`
3.2)【使用變量】
your_name="qinjx"
echo $your_name
echo ${your_name}
-- 可以加 {}, 也可以不加
--【只讀變量】 readonly myUrl
--【刪除變量】 unset variable_name
3.3)【Shell 字符串】
-- 可以單引號或者雙引號,雙引號會解析變量
--獲取字符串長度
string="abcd"
echo ${#string} #輸出 4
-- 截取字符串
string="runoob is a great site"
echo ${string:1:4} # 輸出 unoo
-- 查找字符串
string="runoob is a great company"
echo `expr index "$string" is` # 輸出 8
4. shell中的運算符
4.1)【基本運算符】
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
#!/bin/bash
val=`expr 2 + 2`
echo "兩數之和為 : $val"
4.2)【關系運算符】
lt : litter than
gt: grater than
運算符 | 說明 | 舉例 |
-eq
檢測兩個數是否相等,相等返回 true。
[ $a -eq $b ] 返回 false。
-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。
4.3)【字符串運算符】
-z
檢測字符串長度是否為0,為0返回 true。
[ -z $a ] 返回 false。
-n
檢測字符串長度是否為0,不為0返回 true。
[ -n $a ] 返回 true。
str
檢測字符串是否為空,不為空返回 true。
[ $a ] 返回 true。
4.4)【文件測試運算符】
文件測試運算符用於檢測 Unix 文件的各種屬性。
屬性檢測描述如下:
操作符 | 說明 | 舉例 |
-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。
5.Linux的一些命令
5.1)【一些不太常見的命令】
-- 查看當前發行版本可以使用的shell:cat /etc/shells
5.2)【正則表達式】
基礎正則表達式(BRE)
5.3)【awk命令】
http://blog.csdn.net/shanyongxu/article/details/46563997
5.4)【xargs命令】
http://blog.csdn.net/shanyongxu/article/details/46859829
http://xxxxxx/Linuxjc/1190282.html TechArticle