SHELL程式設計語法彙總

2021-10-12 10:35:31 字數 4080 閱讀 6045

#注意!!等號左右不能有空格

a=12#變數的定義,弱型別,可以用不同角度理解變數的型別可以是整型12,浮點型12,字串12

a=helloworlda=`

pwd`

a=$:

#字串拼接,zsh: a=${}

#區域性變數

local a=12

#位置變數

$0#獲取當前正在執行的shell指令碼的檔名,包括路徑。類似c語言main函式引數

$n#獲取當前執行shell指令碼的第n個引數,n=1...9,如果n>9,則需要將n使用大括號括起來,類似c語言main函式引數

$*#獲取當前執行shell指令碼的所有引數,將所有命令列引數視為單個字串,相當於「$1$2$3」,比較少用,與$n類似

$# #得到執行當前指令碼的引數個數,不包括指令碼名

$@#獲取這個程式所有引數,並保留引數之間的任何空白,相當於「$1」 "$2" "$3",這是將引數傳給其他程式的最好辦法。與$*類似,可以看作一樣。

#!/bin/bash

echo

"ar**[0] = $0"

echo

"ar**[1] = $1"

echo

"ar**[2] = $2"

echo

"ar**[3] = $3"

echo

"\$# = $#"

echo

"\$* = $*"

echo

"\$@ = $@"

#狀態變數

$?#返回上一條命令的返回值,判斷上一指令是否成功執行,0為成功,非0為不成功

$$ #取當前程序的pid

$!#上一指令的pid

#find等指令如果搜尋目錄未定義會預設指定當前目錄為搜尋目錄,這時候如果進行刪除操作可能會出錯,這樣就應該用到引數展開

$#如果變數未定義,則表示式的值為word

$#如果變數未定義,則設定變數的值為word,返回表示式的值也是word

$#用於捕捉由於變數未定義而導致的錯誤並退出程式

$#如果變數已經定義,返回word,也就是真。

#如果沒":",則為空字串也算有,所以還是帶":"比較好$$

#prefix開頭的變數

$#輸出字串的長度

$#從第字元開始擷取

$#從字元開始擷取,取長度

$ #從頭刪除最短匹配,zsh無效

$ #從頭刪除最長匹配,比較少用

$#從尾刪除最短匹配,zsh無效

$#從尾刪除最長匹配,比較少用

$#第乙個匹配被替換

$#全部匹配被替換

$ #把字串開頭的替換為,開頭沒有則無事發生

$#把字串結尾的替換為,結尾沒有則無事發生$$

#全部轉換為小寫、大寫,zsh無效$$

#首字母轉換為小寫、大寫,zsh無效

echo

""echo -e "hello world\n"

#開啟轉義 -n 不輸出新行

echo

"hello $name, this is world"

echo

"\"hello world\""

read

<-options>

$ read

$ abc def #abc儲存到中,def儲存到中

-a #把輸入賦值到陣列中,從索引號零開始。

-d #用字串中的第乙個字元指示輸入結束,而不是乙個換行符

-e #使用readline來處理輸入。這使得與命令列相同的方式編輯輸入

-n #讀取num個輸入字元,而不是整行

-p #使用字串作為輸入時顯示的提示資訊,

-r #raw mode. 不把反斜槓字元解釋為轉義字元

-s #silent mode,輸入不會顯示,像linux輸入密碼時一樣

-t >

#定時輸入,超過時間則跳過

-u fd #使用檔案描述符fd中的輸入,而不是標準輸入

printf

format -string [arguments...]

#!/bin/bash

function _printf_

_printf_(

)function _printf_(

)##函式使用方法

_printf_ "hello world"

##後面的"hello world"為傳入給_printf_函式的引數

##若不傳值給函式 echo預設輸出空行 而%d預設為0

##函式引數傳遞從$1開始,$0是程式名

#陣列宣告

declare -a a

##name[subscript]=value

##name=(value1 value2 ...)

#陣列操作

#輸出陣列所有內容$$

#確定陣列元素個數

$#找到陣列的下標

$#陣列追加

+=(a b c)

#陣列排序,利用管道

sort

#刪除陣列與元素

unset

給定起始數字start_num與終止數字end_num輸出該範圍內所有素數的和,使用線性篩方法求解

#!/bin/bash

declare -a prime

function usage(

)function init()if

[[ $# -ne 2 ]]; then

usage

exit

fistart_num=

$1end_num=

$2if[[

$ -lt 0 ]];

then

start_num=0

fiif[[

$ -gt $]]

;then

usage

exit

fiinit 0 $

for(( i=

2; i<=$; i++));

doif[[

$ -eq 0 ]];

then

prime[0]

=$[$ + 1 ]

prime[$]

=$iif[

[$i -ge $]]

;then

sum=$[

$ + $i]fi

fifor

(( j=

1; j<=$; j++));

doif

[[ $[

$ * $

] -gt $]]

;then

break

fi prime[$[

$ * $]]

=1 if

[[ $[

$ % $

] -eq 0 ]];

then

break

fidone

done

echo

$

求乙個檔案中的最長字串

#!/bin/bash

max_len=0

max_string=

''if

[[ $# -lt 1 ]];then

printf

"usage: %s file [...]\n"

$0fi

#for (( i=1; i<=$#; i++ ));do

# echo $i

#done

for i in

`cat $1 |

tr -s -c "a-za-z"

" "`;do

len=$if

[[$len -gt $]]

;then

max_len=

$len

max_string=

$ifi

done

echo

$max_string

$max_len

shell程式設計語法

執行shell命令,需要在前面加echo shell中變數 home 當前使用者主目錄 pwd 當前執行命令的目錄 user 當前使用者 set 顯示當前shell所有變數 export 變數名 可把變數提公升為全域性環境變數 定義變數 str hello world a 9a ls la反引號,執...

shell 程式設計2(語法)

if判斷結構 if expression then command fi if else判斷結構 if expression then command else command fi 巢狀if if expression1 then command1 elif expression2 then co...

shell程式設計及語法

bin sh echo hello world 執行方式如下 1 a.sh 要求有執行許可權 2 a.sh 後面3個不要求許可權 3 sh a.sh 4 source a.shshell指令碼的第一行也可以改為 bin bash,區別在於如果指令碼執行出錯了bash還會繼續執行,而sh則停止 輸入t...