歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 【夯實shell基礎】shell基礎面面觀,shell面面觀

【夯實shell基礎】shell基礎面面觀,shell面面觀

日期:2017/3/3 17:38:50   编辑:學習Linux

【夯實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

Copyright © Linux教程網 All Rights Reserved