Shell編程學習總結


Shell編程總結

一、Hello World

新建文件test.sh

然后編輯代碼:

#!bin/bash/

echo “hello world !”

cd 到目標目錄下:

chmod +x ./test.sh    #使腳本有執行權限

./test.sh        #運行腳本

另一種運行方式:

sh test.sh

二、變量

  1. 變量名要求:

a)     只能是數字,字符,下划線,並且首字母不能是數字

b)     中間不能有空格,但是可以有下划線

c)      不能用關鍵詞

  1. 使用變量:
myshell=”12345”

echo ${myshell}

花括號加不加都行,加花括號只是方便解釋器識別變量邊界。

另外變量和運算符之間不能有空格。

  1. 只讀變量
myshell=“1234”

readonly myshell

只讀變量意味着不能更改

  1. 刪除變量
myshell=”1234”

unset myshell

echo myshell #可以看到什么也沒輸出

  1. 變量類型

a)     局部變量:只在shell中起作用,shell運行的時候其他命令不能調用它

b)     環境變量:shell運行的時候,其他命令可以調用的

c)      shell變量:是由shell程序設置的特殊變量,有局部變量也有環境變量,這些變量是保證shell的正常運行

  1. shell字符串

a)     單引號:

                          i.          任何字符都會原樣輸出,單引號里面的變量無效

                         ii.          單引號里面不能出現單引號(轉義的也不行)

b)     雙引號

                          i.          雙引號里可以有變量

                         ii.          雙引號里可以出現轉義字符

eg:

       

#!/bin/bash

yourname='lihua'

myshell="Hello, I know you are \"${yourname}\"!"

echo ${myshell}
  1. 拼接字符:
#!/bin/bash

yourname="lihua"

chat="Hello, "$yourname" !"

chat1="Hello, ${yourname} !"

echo ${chat} ${chat1}
  1. 獲取字符串長度
#!/bin/bash

myshell="123"

echo ${#myshell}
  1. 提取子串
#!/bin/bash

string="I'm AI"

echo ${string:1:2}

這個地方運行的時候用sh test.sh可能會不兼容,可以用 chmod +x ./test.sh運行

  1. 查找子串
#!/bin/bash

string="hello, AI"

echo `expr index "$string" h` #兩邊的不是單引號是Esc鍵下邊的那個符號,句式是固定的的
  1. shell數組

shell只支持一維數組

a)     格式:

              數組名=(val1 val2…) #用空格分離

value=(1 2 3 4)

b)     隨機訪問下標:

value[1]=1

c)      讀取數組:

                          i.          ${數組名[下標]}

                         ii.          讀取全部元素${數組名[@]}

d)     獲取長度

# 取得數組元素的個數

length=${#數組名[@]}

# 或者

length=${#數組名[*]}

# 取得數組單個元素的長度

lengthn=${#數組名[n]}

  1. shell注釋

前面加#

三、shell傳遞參數

傳遞參數的格式,$n,$0表示執行文件名,$1表示第一個參數,之后以此類推:

       A+B的小例子:

             

 #!/bin/bash

echo "name:$0"

a=$1

b=$2

c=`expr ${a} + ${b}`

echo ${c}

 

 

       幾個特殊符號:

參數處理

說明

$#

傳遞到腳本的參數個數

$*

一第一個單字符顯示所有腳本傳遞的參數。

$$

腳本運行的當前進程ID號

$!

后台運行的最后一個進程的ID號

$@

與$*相同,使用時加引號,是返回每個參數

$-

顯示shell使用的當前選項,與set命令功能相同

$?

顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值都表示有錯誤。

四、shell基本運算符

a)     基本包括:算數運算符、關系運算符、布爾運算符、字符串運算符、文件測試運算符。

bash不支持原生的數學運算,可以通過其他命令來實現,awk和expr

b)     算數運算符

運算符

說明

舉例

+

加法

`expr $a + $b`

-

減法

`expr $a - $b`

*

乘法

`expr $a * $b`

/

除法

`expr $a / $b`

%

取余

`expr $a % $b`

=

賦值

a=$b

==

相等,返回true

[$a == $b]

!=

不相等,返回true

[$a != $b]

#!/bin/bash

a=1

b=2

if [ $a == $b ]

then     

       echo "equal"

fi

if [ $a != $b ]

then

       echo "not equal"

fi

c)      關系運算符

運算符

說明

舉例

-eq

兩個數是否相等

[ $a –eq $b ]

-ne

兩個數是否不相等

[ $a –ne $b ]

-gt

左邊是否大於右邊

[ $a –gt $b ]

-lt

左邊是否小於右邊

[ $a –lt $b ]

-ge

左邊是否大於等於右邊

[ $a –ge $b ]

-le

左邊是否小於等於右邊

[ $a –le $b ]

d)     布爾運算符

運算符

說明

舉例

!

非運算

[ ! false ]

-o

或運算

[ $a –lt 20 –o $b –gt 100 ]

-a

與運算

[ $a –lt 20 –a $b –gt 100 ]

e)     邏輯運算符

運算符

說明

舉例

&&

邏輯的AND

       [[ $a -lt 100 && $b -gt 100 ]]

||

       邏輯的 OR

[[ $a -lt 100 || $b -gt 100 ]]

f)      字符串運算符

運算符

說明

舉例

=

檢測兩個字符串是否相等

[ $a = $b ]

!=

檢測兩個字符串是否不等

[ $a != $b ]

-z

檢測字符串長度是否為零

[ -z $a ]

-n

檢測字符串長度是否不0

[ -z $a ]

str

檢測字符串是否為空

[ $a ]

g)     文件測試符

操作符

說明

舉例

-b file

檢測文件是否是塊設備文件

[ -b $file ]

-c file

檢測文件是否是字符設備文件

[ -c $file ]

-d file

檢測文件是否是目錄

[ -d $file ]

-f file

檢測文件是否是普通文件

[ -f $file ]

-g file

檢測文件是否設置了SGID位

[ -f $file ]

-k file

檢測文件是否設置了黏着位

[ -k $file ]

-p file

檢測文件是否有名管道

[ -p $file ]

-u file

檢測文件是否設置了SUID位

[ -u $file ]

-r file

檢測文件是否可讀

[ -r $file ]

-w file

檢測文件是否可寫

[ -w $file ]

-x file

檢測文件是否可執行

[ -x $file ]

-s file

檢測文件是否為空

[ -s $file ]

-e file

檢測文件是否存在

[ -e $file ]

五、echo命令

a)     顯示字符串

                 i.          echo “It is a test”

               ii.          雙引號可以省略:echo It is a test

b)     顯示轉義字符

                 i.          echo “\”It is a test \””

c)      顯示變量

#!/bin/bash

read name

echo "$name from read"

d)     顯示換行

                 i.          echo –e “ok! \n” # -e 開啟轉義

echo “It is a test”

e)     顯示不換行

                 i.          echo –e “ok! \c” # -e 開啟轉義

echo “It is a test”

f)      將結果重定向至文件

                 i.          echo “It is a test” > myfile

g)     原樣輸出到字符串,不進行轉移或取變量

                 i.          echo ‘$name\”’s

h)     顯示執行命令結果

                 i.          echo `date`  #這里用的是反引號

六、Shell流程控制、

a)     if

語法格式:

if condition

then
       command1

       command2

        …

fi

b)     if else

if condition

then

       command1

       …

else

       command1

       …

fi

c)      if else-if else

if condition1

then

       command1

elif condition2

then

       command1

else

       commandm

fi

d)     for 循環

格式:

       

for var in item1 item2 … itemN

do

    command1

    command2

    …

Done

例子:

#!/bin/bash

value=(A B C D)

for var in ${value[@]}

do

       echo "The value is: $var"

done

for loop in A B C D

do  

       echo "The value is: $loop"

done

e)     while循環

while condition

do

       command

done

例子:

#!/bin/bash

int=1

while(( $int<=5 ))

do

       echo $int

       let "int++"

done

f)      until循環

就像do-while和while循環的區別一樣

g)     case

就像switch。

格式:

       

case 值 in

       模式1)

              command1

              …

              ;;

       模式2)

              command2

              …

              ;;

       esac #就像C語言中的default

h)     break、continue、esac

七、shell函數

格式:

      

 [ function ] funname [()]

{

           action;

           [return int;]

}

              例子:

                    

 #!/bin/bash

demoFun() {

                            echo "$1"

                            echo "$2"

}

demoFun 100 110

八、輸入輸出重定向

命令

說明

Command > file

將輸出重定向到file

Command < file

將輸入重定向到file

Command >> file

將輸出以追加的方式重定向到file

n > file

將文件描述符為n的文件重定向到file

n >> file

將文件描述符為n的文件以追加的方式重定向到file

n >& m

將輸出文件m和n合並

n <& m

將輸入文件m和n合並

<< tag

將開始標記tag和結束標記tag之間的內容作為輸入

九、Shell文件包含

格式:

       . filename #注意點號和文件名中間有一空格

       source filename

實例:

test1.sh

#!/bin/bash

url=http://www.runoob.com

test2.sh

#!/bin/bash

#通過.號來引用test1.sh文件,這樣test1.sh中的東西test2.sh就能用了

. ./test1.sh

echo "$url"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM