linux shell腳本編程

linux shell腳本編程

簡單介紹:

Shell: 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。

Shell腳本:一種爲shell編寫的腳本程序

腳本:通過寫若干行代碼保存後,執行該文件上面代碼並不需要重複手動輸入代碼而做到該代碼執行的效果

Shell 環境:
Shell 編程跟 JavaScript、php 編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Linux 的 Shell 種類衆多,常見的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
本文主要介紹的sell的是 Bash,也就是 Bourne Again Shell,由於易用和免費,Bash 在日常工作中被廣泛使用。同時,Bash 也是大多數Linux 系統默認的 Shell。

1.1shell變量
1.1.1
Shell變量名遵循如下規則:
命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭。
中間不能有空格,可以使用下劃線(_)。
不能使用標點符號。
不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。
有效的變量名如:RUNNOOB,ld_librar_PATH,_VAR,VAR2
無效的變量命名如:?var=123,user*name=runoob

已經定義過的變量可以重新定義

your_name=“tom”
echo $your_name
your_name=“alibaba”
echo $your_name

除了顯式的直接賦值,還可以用語句給變量賦值,如
for file in ‘ls/etc’ (該語句試將/etc下目錄的文件名循環出來)

1.1.2使用變量

使用一個定義過的變量,只要加美元符號即可如:
My_name=”mhj”
echo $My_name
echo ${My_name}

變量名外面的花括號是可選的,加花括號是爲了幫助解釋器識別變量的邊界
(num=2
echo “this is the $numnd”
這並不會打印出"this is the 2nd",而僅僅打印"this is the ",因爲shell會去搜索變量numnd的值,
但是這個變量時沒有值的。可以使用花括號來告訴shell我們要打印的是num變量:
num=2
echo “this is the ${num}nd”
  這將打印: this is the 2nd)

1.1.3只讀變量
使用readonly命令可以將變量定義爲只讀變量,只讀變量值不能被改變

1.1.4刪除變量
使用 unset 命令可以刪除變量
Unset variable_name

2.1 shell數組

Bash支持一維數組(不支持多維數組)並且沒有限定數組的大小。
類似於 C 語言,數組元素的下標由 0 開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於 0。

2.1.1定義數組:
例如
Aray_name=(value0 value1 value2 value3)

2.1.2讀取shell數組:
例如
Valuen=${array_name[n]}

2.1.3獲取數組的長度
獲取數組長度的方法與獲取字符串長度的方法相同,例如:
取得數組元素的個數
length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]} …{#array_name[*]}
取得數組單個元素的長度
lengthn=${#array_name[n]}

3.1shell註釋
3.1.1單行註釋
以 # 開頭的行就是註釋,會被解釋器忽略。

通過每一行加一個 # 號設置多行註釋,像這樣:

#--------------------------------------------
#這是一個註釋
#author:菜鳥教程
#site:www.runoob.com
#slogan:學的不僅是技術,更是夢想!
#--------------------------------------------

用戶配置區 開始

#這裏可以添加腳本描述信息

用戶配置區 結束

3.1.2多行註釋
多行註釋還可以使用以下格式:

:<<EOF
註釋內容…
註釋內容…
註釋內容…
EOF

4.1shell基本運算符號
4.1.1算數運算符
運算符 說明 舉例:a=10,b=20

  • 加法 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。

4.1.2關係運算符

運算符 說明 舉例:a=10,b=20
-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.1.3布爾運算符
運算符 說明 舉例:a=10,b=20
! 非運算,表達式爲 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。

4.1.4邏輯運算符
運算符 說明 舉例:a=10,b=20
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

4.1.5字符串運算符
運算符 說明 舉例:a=10,b=20
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否爲0,爲0返回 true。 [ -z a]falsen00true[n"a ] 返回 false。 -n 檢測字符串長度是否爲0,不爲0返回 true。 [ -n "a" ] 返回 true。
$ 檢測字符串是否爲空,不爲空返回 true。 [ $a ] 返回 true。

4.1.6文件測試運算符
操作符 說明 舉例:a=10,b=20
-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.1shell echo命令
5.1.1顯示普通字符串
實例:echo “It is a test”

結果:echo It is a test

5.1.2顯示轉義字符
實例:echo ““It is a test””

結果:“It is a test”

5.1.3顯示變量
實例:#!/bin/sh
read name
echo “$name It is a test”

結果:[root@www ~]# sh test.sh
OK #標準輸入
OK It is a test #輸出

5.1.4顯示換行
實例:echo -e “OK! \n” # -e 開啓轉義
echo “It is a test”

結果:OK!
It is a test

5.1.5顯示不換行
實例:#!/bin/sh
echo -e “OK! \c” # -e 開啓轉義 \c 不換行
echo “It is a test”

結果:OK! It is a test

6.1shell printf 命令
6.1.1printf的轉義序列
序列 說明
\a 警告字符,通常爲ASCII的BEL字符
\b 後退
\c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略
\f 換頁(formfeed)
\n 換行
\r 回車(Carriage return)
\t 水平製表符
\v 垂直製表符
\ 一個字面上的反斜槓字符
\ddd 表示1到3位數八進制值的字符。僅在格式字符串中有效
\0ddd 表示1到3位的八進制值字符

實例:$ printf “a string, no processing:<%s>\n” “A\nB”

結果:a string, no processing:<A\nB>

7.1shell test命令
7.1.1數值測試
參數 說明
-eq 等於則爲真
-ne 不等於則爲真
-gt 大於則爲真
-ge 大於等於則爲真
-lt 小於則爲真
-le 小於等於則爲真

實例:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘兩個數相等!’
else
echo ‘兩個數不相等!’
Fi

輸出結果:兩個數相等!

7.1.2字符串測試
參數 說明
= 等於則爲真
!= 不相等則爲真
-z 字符串 字符串的長度爲零則爲真
-n 字符串 字符串的長度不爲零則爲真

實例:
num1=“ru1noob”
num2=“runoob”
if test $num1 = $num2
then
echo ‘兩個字符串相等!’
else
echo ‘兩個字符串不相等!’
fi

輸出結果:
兩個字符串不相等!

7.1.3文件測試
參數 說明
-e 文件名 如果文件存在則爲真
-r 文件名 如果文件存在且可讀則爲真
-w 文件名 如果文件存在且可寫則爲真
-x 文件名 如果文件存在且可執行則爲真
-s 文件名 如果文件存在且至少有一個字符則爲真
-d 文件名 如果文件存在且爲目錄則爲真
-f 文件名 如果文件存在且爲普通文件則爲真
-c 文件名 如果文件存在且爲字符型特殊文件則爲真
-b 文件名 如果文件存在且爲塊特殊文件則爲真

實例:
cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi

輸出結果:
文件已存在!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章