乙個程式演示所有的shell程式設計知識

2021-06-19 06:11:25 字數 3622 閱讀 8586

#!/bin/sh -x

#由反引號括起來的也是一條命令,shell先執行該命令,然後將輸出結果立刻代換到當前命令列中。例如定義乙個變數存放date命令的輸出:

echo

`date`

#命令代換也可以用$()表示:

echo $

(date

)#如果乙個變數叫做varname,用$可以表示它的值,在不引起歧義的情況下也可以用$varname表示它的值。通過以下例子比較這兩種表示法的不同:

echo $shell

echo $shellabc

echo $

abc#單引號用於保持引號內所有字元的字面值,即使引號內的\和回車也不例外,但是字串中不能出現單引號

echo

'$shell'

echo

"$shell"

echo

'$shell

hello world'

#雙引號用於保持引號內所有字元的字面值(回車也不例外),除以下情況外:

#$加變數名可以取變數的值

#反引號仍表示命令替換

#\$表示$的字面值

#\`表示`的字面值

#\"表示"的字面值

#\\表示\的字面值

echo

"$shell

hello world"

echo

"\$shell

hello world"

#命令test或[可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status為0,如果測試結果為假,則命令的exit status為1

var=

2test $var

-gt

1echo $

?test $var

-gt

3echo $?[

$var

-gt 3]

echo $

?#存在desktop目錄且var等於abc

var=

abc[-d

desktop

-a $var

='abc'

]echo $

?#在shell中用if、then、elif、else、fi這幾條命令實現分支控制

echo

"is it morning? please answer yes or no."

read yes_or_noif[

"$yes_or_no"

="yes"

];then

echo

"good morning!"

elif

["$yes_or_no"

="no"

];then

echo

"good afternoon!"

else

echo

"sorry, $yes_or_no not recognized. enter yes or no."

exit1fi

#c語言的case只能匹配整型或字元型常量表示式,而shell指令碼的case可以匹配字串和wildcard,每個匹配分支可以有若干條命令,末尾為;;

echo

"is it morning? please answer yes or no."

read yes_or_no

case

"$yes_or_no"

inyes|y

|yes

|yes

)echo

"good morning!";;[

nn]*)

echo

"good afternoon!"

;;*)

echo

"sorry, $yes_or_no not recognized. enter yes or no."

exit1;;

esac

forfruit in;

doecho

"i like $fruit"

done

#while的用法和c語言類似

echo

"enter password:"

read try

while

["$try"

!="secret"

];do

echo

"sorry, try again"

read try

done

counter=1

while

["$counter"

-lt

10];

doecho

"counter is $counter"

counter=$

(($counter+1

))done

#$0     相當於c語言main函式的argv[0]

echo

"the program $0 is now running"

#$1、$2...       這些稱為位置引數(positional parameter),相當於c語言main函式的argv[1]、argv[2]...

echo

"the first parameter is $1"

echo

"the second parameter is $2"

$@      

表示引數列表

"$1"

"$2"

...,例如可以用在

for迴圈中的

in後面

forparam

in$@;do

echo

"param $param"

done

echo

"the parameter list is $@"

#位置引數可以用shift命令左移

shift

echo

"the first parameter is $1"

echo

"the second parameter is $2"

echo

"the parameter list is $@"

#數就像是迷你指令碼,呼叫函式時可以傳任意個引數,在函式內同樣是用$0、$1、$2等變數來提取引數

#函式中的位置引數相當於函式的區域性變數,改變這些變數並不會影響函式外面的$0、$1、$2等變數

#函式中可以用return命令返回,如果return後面跟乙個數字則表示函式的exit status

is_directory

()for

dir

in"$@";do

ifis_directory

"$dir"

then

:else

echo

"$dir doesn't exist. creating it now..."

mkdir $dir

>

/dev/

null

2>&1if

[$?-

ne 0

];then

echo

"cannot create directory $dir"

exit1fi

fidone

**:

乙個撤銷所有系統列印請求的shell程式

這是筆者的原創,需要的朋友請頂一下。撤銷所有的系統列印請求 canall by melove 97年5月 print lpstat u wc l if test print eq 0 then echo nsorry 無系統列印請求可撤銷 n exit 0 fiecho n正在撤銷所有的系統列印請求...

給乙個aspx頁面上所有的TextBox置值

今日看以面試題目,要給乙個aspx頁面上所有的textbox置值,於是用以下 foreach control aa in this.controls 但是發生了問題,認不出來,於是把所有的控制項輸出來看了一下,包括 system.web.ui.literalcontrol system.web.ui...

編乙個程式求質數的和

編乙個程式求質數的和,例如f 7 2 3 5 7 11 13 17 58。方法1 對於從2開始的遞增整數n進行如下操作 用 2,n 1 中的數依次去除n,如果餘數為0,則說明n不是質數 如果所有餘數都不是0,則說明n是質數,對其進行加和。空間複雜度為o 1 時間複雜度為o n 2 其中n為需要找到的...