一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Shell編程(/bin/sh和/bin/bash)

 alfaromeo 2010-12-21

保留字符及其含義

shell變量

條件測試命令

表達(dá)式

流程控制

參考資料

 

查看ubuntu支持的Shell:

$ cat /etc/shells

查看當(dāng)前shell:

$ echo $SHELL

 

以下是sh Shell腳本編程,也適用于bash,差異之處已說明。

保留字符及其含義

$ shell變量名的開始,如$var

| 管道,將標(biāo)準(zhǔn)輸出轉(zhuǎn)到下一個(gè)命令的標(biāo)準(zhǔn)輸入

# 注釋開始

& 在后臺(tái)執(zhí)行一個(gè)進(jìn)程

? 匹配一個(gè)字符

* 匹配0到多個(gè)字符(與DOS不同,可在文件名中間使用,并且含.)

$- 使用set及執(zhí)行時(shí)傳遞給shell的標(biāo)志位

$! 最后一個(gè)子進(jìn)程的進(jìn)程號

$# 傳遞給shell script的參數(shù)個(gè)數(shù)

$* 傳遞給shell script的參數(shù)

$@ 所有參數(shù),個(gè)別的用雙引號括起來

$? 上一個(gè)命令的返回代碼

$0 當(dāng)前shell的名字

$n (n:1-) 位置參數(shù)

$$ 進(jìn)程標(biāo)識號(Process Identifier Number, PID)

>file 輸出重定向

`command` 命令替換,如 filename=`basename /usr/local/bin/tcsh`

>>fiile 輸出重定向,append

其他:

$$dir

ls > filelist

ls >> filelist

wc -l < filelist

wc -l filelist

sleep 5; echo 5 seconds reaches; ls -l

ps ax |egrep inetd

find / -name core -exec rm {} \; &

filename=`date "+%Y%m%d"`.log

 

shell變量

Shell有如下四種變量:

.用戶自定義變量

.位置變量即 shell script之參數(shù)

.預(yù)定義變量(特殊變量)

.環(huán)境變量

(1)用戶自定義變量(數(shù)據(jù)的存儲(chǔ))

$ COUNT=1
$ NAME
="He Binwu"
$ echo $NAME
$ echo ${NAME}

技巧:因?yàn)榇蟛糠諹NIX命令使用小寫字符,因此在shell編程中通常使用全大寫變量,當(dāng)然這并不是強(qiáng)制性的,但使用大寫字符可以在編程中方便地識別變量。

變量的調(diào)用:在變量前加$。

使用unset命令刪除變量的賦值。

$ Z=hello
$ echo
$Zhello
$ unset Z
$ echo $Z
$

在變量未賦值之前其值為空。Bourne Shell允許對變量設(shè)置默認(rèn)值(相當(dāng)于C#中 ?? 表達(dá)式),其格式如下:

${variable:-defaultvalue}

例:

$ echo Hello $UNAME
Hello
$ echo Hello ${UNAME:
-there}
Hello there
$ echo $UNAME #變量值并未發(fā)生變化
there
$ UNAME
=hbwork
$ echo Hello ${UNAME:
-there}
Hello hbwork

另一種情況:改變變量的值,格式如下:

${variable:=value}

$ echo Hello $UNAME
Hello
$ echo Hello ${UNAME:
=there}
Hello there
$ echo $UNAME #變量值并未發(fā)生變化
there

變量替換中使用命令替換:

echo ${MYDIR} #輸出空
echo ${MYDIR:
-`pwd`}

輸出:

/home/pxl/shelltest

在變量已賦值時(shí)進(jìn)行替換:

MYTEST=pxl
echo ${MYTEST}
echo ${MYTEST:
+"changevalue"}
echo $MYTEST

輸出:
pxl
changevalue
pxl

帶有錯(cuò)誤檢查的有條件變量替換:

echo ${UNAME:?"UNAME has not been set"}
echo ${UNAME} #如果上一句判斷錯(cuò)誤,這里不會(huì)執(zhí)行

輸出:
./test.sh: 17: UNAME: UNAME has not been set

(2)位置變量(Shell參數(shù))

在shell script中位置參數(shù)可用$1..$9表示,$0表示內(nèi)容通常為當(dāng)前執(zhí)行程序的文件名。

可以使用shift [n] 來刪出指定前n個(gè)參數(shù),n默認(rèn)為1.

腳本test.sh
shift
shift
2
echo $
1
echo $0

執(zhí)行:
$ .
/test.sh a b c d e

輸出:
d
./test.sh

 

條件測試命令

(1)數(shù)值測試:

-eq :等于則為真。
-ne :不等于則為真。
-gt :大于則為真。
-ge :大于等于則為真。
-lt :小于則為真。
-le :小于等于則為真。

(2)字串測試:
= :等于則為真。
!= :不相等則為真。
-z字串 :字串長度偽則為真。
-n字串 :字串長度不偽則為真。

(3)文件測試:
-e文件名 :如果文件存在則為真。
-r文件名 :如果文件存在且用戶有讀權(quán)限則為真。
-w文件名 :如果文件存在且用戶有寫權(quán)限則為真。
-x文件名 :如果文件存在且用戶有可執(zhí)權(quán)限行則為真。
-s文件名 :如果文件存在且至少有一個(gè)字符(大小不為零)則為真。
-d文件名 :如果文件存在且為目錄則為真。
-f文件名 :如果文件存在且為普通文件則為真。
-c文件名 :如果文件存在且為字符設(shè)備文件則為真。
-b文件名 :如果文件存在且為塊設(shè)備文件則為真。

 

表達(dá)式

(1) 與、或、非

&& :與

|| :或

!  : 非(需要有空格)

(2) expr命令

expr命令一般用于整數(shù)值,但也可用于字符串。一般格式為:
expr argument operator argument

其中operator為+ - * / %, 但對*的使用要用轉(zhuǎn)義符\。

v1=3
v2
=2
v3
=`expr $v1 \* $v2`
echo $v3

輸出:
6

 

#適用于/bin/bash,不適用于/bin/sh
v1=3
v2
=2
v3
=$[v1*v2]
echo
$v3

 

流程控制

(1) if 條件語句

if [ -f "$file" ] ; then
newfile
=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ]; then
     echo
"ERROR: $newfile exists already"
else
echo
"renaming $file to $newfile ..."
mv
"$file" "$newfile"
fi
fi

 

(2) for 循環(huán)

for file in $*; do
if [ -f "$file" ] ; then
newfile
=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ]; then
     echo
"ERROR: $newfile exists already"
else
echo
"renaming $file to $newfile ..."
mv
"$file" "$newfile"
fi
fi
done

 

for n in 9 8 7 6 5 4 3 2 1; do
if [ -f "$filen.$n" ]; then
p
=`expr $n + 1`
echo
"mv $filen.$n $filen.$p"
mv
$filen.$n $filen.$p
fi
done

 

#適用于/bin/bash,不適用于sh
for((i=1;i<=10;i++));do
echo
$i
done

 

(3) while 循環(huán)

while [ -n "$1" ]; do
echo
$1
shift
done

 

(4) case 條件

while [ -n "$1" ]; do
case
$1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done

 

參考資料

Shell編程基礎(chǔ)

shell編程簡介

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩精品中文字幕亚洲| 99久免费精品视频在线观| 国产又猛又大又长又粗| 婷婷色网视频在线播放| 亚洲欧美日本成人在线| 草草草草在线观看视频| 亚洲精品美女三级完整版视频| 欧美国产日产在线观看| 日本一级特黄大片国产| 国产又大又硬又粗又黄| 日本黄色美女日本黄色| 国产不卡在线免费观看视频| 在线免费不卡亚洲国产| 国产精品一区二区视频| 91人妻人澡人人爽人人精品| 蜜桃av人妻精品一区二区三区 | 日韩夫妻午夜性生活视频| 国产一区一一一区麻豆| 五月天丁香婷婷狠狠爱| 一二区不卡不卡在线观看| 精品al亚洲麻豆一区| 中文字幕精品人妻一区| 成人国产一区二区三区精品麻豆| 日韩三级黄色大片免费观看| 少妇在线一区二区三区| 日韩av欧美中文字幕| 成年男女午夜久久久精品| 少妇成人精品一区二区| 亚洲精品小视频在线观看| 老司机精品视频在线免费| 加勒比日本欧美在线观看| 国产精品亚洲一级av第二区| 日韩高清中文字幕亚洲| 精品国产丝袜一区二区| 国产精品内射视频免费| 国产精品一区二区三区日韩av| 亚洲国产丝袜一区二区三区四| 色无极东京热男人的天堂| 99热中文字幕在线精品| 国产成人精品在线一区二区三区| 99热九九热这里只有精品|