shell日常使用整理

2021-06-22 11:33:01 字數 4554 閱讀 2917

1.變數命名規則:

首字元必須為字母

中間不能有空格,可以有下劃線_

不能使用標點符號

不能使用bash裡的關鍵字

2.變數賦值

變數名=值, (注意,= 兩邊不能有空格)

var=1

var=$var+1

echo $var+1

輸出為1+1,而不是2

可以用如下方法使其輸出為2

let "var+=1"

#var=$[$var+1]

#var=$(($var+1))

echo $var

或者var=1

var= expr $var + 1 #(注意,+ 兩邊的空格,一定要有)

let表示數**算,expr用於整數值運算,每一項用空格隔開,$將中括號內的表示式作為數**算先計算結果再輸出。

在bash中,將數**算結果賦給某個變數, var=$[ operation ]

變數自增,自減

let var++ let var--

let var+=2

echo "10.2-2" | bc -- 小數運算要用bc $不支援小數

3.變數使用

$var $ " " 中可以用$var ,\" ' ' 中不可以用$var \" $(cmd) 與 `cmd` 等效

內建變數

條件變數替換

bash shell可以進行變數的條件替換,既只有某種條件發生時才進行替換,替換條件放在{}中.

$當變數未定義或者值為空時,返回值為word的內容,否則返回變數的值.

$與前者類似,只是若變數未定義或者值為空時,在返回word的值的同時將 word賦值給value

$若變數已賦值的話,正常替換.否則將訊息message送到標準錯誤輸出若此替換出現在shell程式中,那麼該程式將終止執行.

$若變數已賦值的話,其值才用word替換,否則不進行任何替換

$$ 從變數中提取子串,這裡offset和length可以是算術表示式.

$變數的字元個數

$ $去掉value中與pattern相匹配的部分,條件是value的開頭與pattern相匹配 #與##的區別在於乙個是最短匹配模式,乙個是最長匹配模式.

$ $與7.類似,只是是從value的尾部於pattern相匹配,%與%%的區別與#與##一樣

$ $進行變數內容的替換,把與pattern匹配的部分替換為string的內容,/與//的區別與上同 注意: 上述條件變數替換中,除2.外,其餘均不影響變數本身的值

4.比較運算子

-e filename                如果 filename 存在,則為真               [ -e /var/log/syslog ]

-d filename 如果 filename 為目錄,則為真 [ -d /tmp/mydir ]

-f filename 如果 filename 為常規檔案,則為真 [ -f /usr/bin/grep ]

-l filename 如果 filename 為符號鏈結,則為真 [ -l /usr/bin/grep ]

-r filename 如果 filename 可讀,則為真 [ -r /var/log/syslog ]

-w filename 如果 filename 可寫,則為真 [ -w /var/mytmp.txt ]

-x filename 如果 filename 可執行,則為真 [ -l /usr/bin/grep ]

filename1 -nt filename2 如果 filename1 比 filename2 新,則為真 [ /tmp/install/etc/services -nt /etc/services ]

filename1 -ot filename2 如果 filename1 比 filename2 舊,則為真 [ /boot/bzimage -ot arch/i386/boot/bzimage ]

-z string               如果 string 長度為零,則為真            [ -z "$myvar" ]

-n string 如果 string 長度非零,則為真 [ -n "$myvar" ]

string1 = string2 如果 string1 與 string2 相同,則為真 [ "$myvar" = "one two three" ]

string1 != string2 如果 string1 與 string2 不同,則為真 [ "$myvar" != "one two three" ]

5.結構語句
if command

then

commands

fiif command; then #如果then與if在同一行,if command後要加';'

commands

fiif command

then

commands

else

commands

fiif command1

then

commands

elif command2

then

commands

fiif test condition

if [ condition ] 注意與condition之間的空格,> < 需要轉義

then

commands

fiif ((expression)) > < 不需要轉義

then

commands

fiif [[condition]] 可以用正規表示式

then

commands

ficase variable in

pattern1 | pattern2)

commands1

;;pattern3)

commands2::

;;*) default commands

;;esac

for var in list

do commands

done

while test command

do other commands

done

until test command

do other commands

done

break n (default 1) 跳出n層迴圈

continue n (default 1) 繼續n級迴圈

select var in list

do commands

done

6.函式

語法

[ function ] funname [()]

說明:1. 可以帶function fun() 定義,也可以直接fun() 定義,不帶任何引數。

2. 引數返回,可以顯式return返回,return後跟數值n(0-255);如果不加,將以最後一條命令執行結果,作為返回值。

注意事項

必須在呼叫函式地方之前,宣告函式,shell指令碼是逐行執行。不會像其它語言一樣先預編譯。一次必須在使用函式前先宣告函式。

total=$(func 3 2); 通過這種呼叫方法,我們清楚知道,在shell 中 單括號裡面,可以是:命令語句。 因此,我們可以將shell中函式,看作是定義乙個新的命令,它是命令,因此 各個輸入引數直接用 空格分隔。 一次,命令裡面獲得引數方法可以通過:$0…$n得到。 $0代表函式本身。

函式返回值,只能通過$? 系統變數獲得,直接通過=,獲得是空值。其實,我們按照上面一條理解,知道函式是乙個命令,在shell獲得命令返回值,都需要通過$?獲得。

需要獲得函式值:通過$?獲得

如果需要傳出其它型別函式值,可以在函式呼叫之前,定義變數(這個就是全域性變數)。在函式內部就可以直接修改,然後在執行函式就可以讀出修改過的值

如果需要定義自己變數,可以在函式中定義:local 變數=值 ,這時變數就是內部變數,它的修改,不會影響函式外部相同變數的值.

shell指令碼的日常使用

說明 該文章是日常使用shell指令碼時常用命令和用法的總結,很多內容參考了其他部落格,在此一併說明並感謝 命令列中while的使用 參考 有時候想直接在命令列中寫乙個簡單的監測腳步,監測某個引數的變化,可以用下面的語句 死迴圈 命令格式 while do command done 舉例 wangh...

MYSQL日常使用命令整理

一.檢視mysql表結構的方法有三種 1 desc tablename 2 show create table tablename 3 use information schema select from columns where table name tablename 如果要檢視怎麼建立資料表...

Shell日常使用中問題總結

記錄日常工作中遇到的shell問題,持續發現錯誤 在shell中有單引號 雙引號,其中單引號更加的嚴格,關閉所有有特殊作用的字元,會將裡面的內容按照原始的狀態輸出 雙引號,會忽略很多特殊符號,但 反引號 反斜桿,如 反 引號 反 斜桿,如 會以引數傳遞的形式輸出。裡面是單引號,以shell指令碼的形...