日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell常见知识

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell常见知识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Shell常見知識(shí)

 

一、用戶登陸進(jìn)入系統(tǒng)后的系統(tǒng)環(huán)境變量

$HOME 使用者自己的目錄

$PATH 執(zhí)行命令時(shí)所搜尋的目錄

$TZ 時(shí)區(qū)

$MAILCHECK 每隔多少秒檢查是否有新的信件

$PS1 在命令列時(shí)的提示號(hào)

$PS2 當(dāng)命令尚未打完時(shí),Shell 要求再輸入時(shí)的提示號(hào)

$MANPATH man 指令的搜尋路徑

二、特殊變量

$0 這個(gè)程序的執(zhí)行名字

$n 這個(gè)程序的第n個(gè)參數(shù)值,n=1..9

$* 這個(gè)程序的所有參數(shù)

$# 這個(gè)程序的參數(shù)個(gè)數(shù)

$$ 這個(gè)程序的PID

$! 執(zhí)行上一個(gè)指令的PID

$? 執(zhí)行上一個(gè)指令的返回值

三、shell中的變元

* 任意字符串

? 一個(gè)任意字符

[abc] a, b, c三者中之一

[a-n] 從a到n的任一字符

四、幾個(gè)特殊字符表示

\b 退回

\c 打印一行時(shí)沒有換行符 這個(gè)我們經(jīng)常會(huì)用到

\f 換頁

\r 回車

\t 制表

\v 垂直制表

\\ 反斜線本身

五、判斷文件的屬性

格式:-操作符 filename

-e 文件存在返回1, 否則返回0

-r 文件可讀返回1,否則返回0

-w 文件可寫返回1,否則返回0

-x 文件可執(zhí)行返回1,否則返回0

-o 文件屬于用戶本人返回1, 否則返回0

-z 文件長度為0返回1, 否則返回0.

-f 文件為普通文件返回1, 否則返回0

-d 文件為目錄文件時(shí)返回1, 否則返回0

六、測試字符串

字符串1 = 字符串2 當(dāng)兩個(gè)字串相等時(shí)為真

字符串1 != 字符串2 當(dāng)兩個(gè)字串不等時(shí)為真

-n 字符串    當(dāng)字符串的長度大于0時(shí)為真

-z 字符串  當(dāng)字符串的長度為0時(shí)為真

字符串 當(dāng)串字符串為非空時(shí)為真

七、測試兩個(gè)整數(shù)關(guān)系

數(shù)字1 -eq 數(shù)字2 兩數(shù)相等為真

數(shù)字1 -ne 數(shù)字2 兩數(shù)不等為真

數(shù)字1 -gt 數(shù)字2 數(shù)字1大于數(shù)字2為真

數(shù)字1 -ge 數(shù)字2   數(shù)字1大于等于數(shù)字2為真

數(shù)字1 -lt 數(shù)字2 數(shù)字1小于數(shù)字2為真

數(shù)字1 -le 數(shù)字2 數(shù)字1小于等于數(shù)字2為真

八、邏輯測試

-a     與

-o  或

!非

shell中的特殊字符有

1、$ 美元符

2、\ 反斜杠

3、` 反引號(hào)

4、" 雙引號(hào)

5、< ,>,*,?,[,]

下面我一一舉列說明

一、$符號(hào)

1、echo $? 顯示的是上一條指令退出狀態(tài)

2、echo "$?" 效果同上

3、echo '$?' 顯示的是$?

4、echo \$? 顯示的是$?

5、echo "\$?" 顯示的是$?

大家可能已經(jīng)看出 $符號(hào)在雙引號(hào)中具有特殊意義 雙引號(hào)對(duì)$符號(hào)不起作用而單引號(hào)可以將特殊字符的的特殊意義屏蔽掉,使其能顯示為字符本身,反斜杠也可以將特殊字符的特殊含義屏蔽掉,使特殊字符失去特殊含義。

二、\ 反斜杠

反斜杠的作用是將特殊符號(hào)字符的特殊含義屏蔽掉,使其還是原字符

A=1234

echo \$A 顯示為$A 如果不加\將顯示為1234

echo \` 顯示為`

echo \" 顯示為雙引號(hào)

echo \\ 顯示為\

三、` 反引號(hào)

反引號(hào)的功能是命令替換,將反引號(hào)中的字符串做為命令來執(zhí)行,我們在用shell編程時(shí)經(jīng)常用的到 將系統(tǒng)命令的執(zhí)行結(jié)果賦給一個(gè)變量

A=`date`

echo $A 顯示的不是date而是當(dāng)時(shí)的時(shí)間串

比如有一文件A的內(nèi)容如下 

ABCDEFG

1234456

abcdefg

B=`cat A|grep 234` # 檢索文件A中含有字符串234的行

echo $B 將顯示為1234456

echo "$B" 將顯示為什么?

echo "\$B" 將顯示為什么?讀者自己試試

四、" 雙引號(hào)

在系統(tǒng)中有些特殊字符,為避免引用這些特殊字符 往往用雙引號(hào)或單引號(hào)將這些特殊字符引起來,使其不具有特殊含義。

但有一部分特殊字符在引號(hào)中還是具有特殊含義,用雙引號(hào)引起來是不起作用的。本文中所列的前四個(gè)特殊字符在雙引號(hào)中還是特殊字符。為了使其不具有特殊含義一是用單引號(hào)引進(jìn)來二是用\反斜線使其失去作用。

比如我們想原樣輸出這些特殊字符

echo """

echo "$"

echo "\"

echo "`"

以上不是你所期望的結(jié)果,因?yàn)殡p引號(hào)對(duì)它們不起作用,你只能這樣才能輸出這些特殊字符的原形

echo '"'

echo '$'

echo '\'

echo '`'



echo "\""

echo "\$"

echo "\\"

echo "\`"

將分別顯示為 " $ \ `

五、其它特殊字符

大家注意到,除了前四個(gè)特殊字符外,我將其它的特殊字符都放在一塊,這是因?yàn)榍八膫€(gè)特殊字符在雙引號(hào)中還是具有特殊含義,所以單獨(dú)拿出來講,除此以外的特殊字符如果你要輸出這些特殊字符的原形,你就可以用雙引號(hào)或單引號(hào)引起來使其失去特殊含義。

< ,>,*,?,[,]對(duì)shell有特殊含義 但你可以用雙引號(hào)引起來輸入這些原形

一、if 條件語句 

格式:

if 條件表達(dá)式

then #當(dāng)條件為真時(shí)執(zhí)行以下語句

命令列表

else #為假時(shí)執(zhí)行以下語句

命令列表

fi

if 語句也可以嵌套使用

if 條件表達(dá)式1

then

if 條件表達(dá)式2

then

命令列表

else

if 條件表達(dá)式3

then

命令列表

else

命令列表

fi

fi

else

命令列表

fi

你可以進(jìn)行多層嵌套 一個(gè)if語句一定要跟一個(gè)fi 表示該層條件結(jié)束否則會(huì)造成語法錯(cuò)誤結(jié)合前面講的 舉例如下:

這里先講一個(gè)條件語句中用到的命令test 表示測試test后面的條件是否為真

if test -f "$1"

then

lpr $1

else

if test -d "$1"

then

cd $1

lpr $1

else

echo "$1不是文件或目錄"

fi

fi

以上的例子還可以改成如下所示

if test -f "$1"

then

lpr $1

elif test -d "$1" #elif 同else if

then

(cd $1;lpr $1)

else

echo "$1不是文件或目錄"

fi

以上的例子不知您是否看懂是什么意思嗎?

假如我們現(xiàn)在將這個(gè)例子保存為prfile

chmod +x prfile

執(zhí)行剛才的程序

./prfile aaa

這個(gè)例子是檢查你的輸入的參數(shù)是否是一個(gè)文件 如果是就打印 如果是一個(gè)目錄 先轉(zhuǎn)目錄再打印 如果即不是文件也不是目錄給出提示

二、多重條件測試語句case

格式:

case 字串 in

模式) 命令列表;;

模式) 命令列表;;

....

esac

多重條件語句是以case 開始以esac結(jié)束 中間可以有多個(gè)條件列表 功能是測試字串和和里面的模式有沒有匹配的,有就執(zhí)行里面的命令列表 模式也可以是*號(hào) 表示任意字串,每個(gè)模式里面的最后要心;;雙引號(hào)結(jié)束,否則會(huì)發(fā)生語法錯(cuò)誤。

現(xiàn)舉例如下:

case $1 in

*.c)

cc $1

;;

*.txt)

lpr $1

;;

*)

echo "未知的類型"

esac

假如將以上內(nèi)容保存在文件abc中

chmod +x abc

執(zhí)行 ./abc a.c   將會(huì)對(duì)文件a.c進(jìn)行編譯

執(zhí)行 ./abc readme.txt 將會(huì)把文件通過打印機(jī)

假如我將以上內(nèi)容改一下,你是否會(huì)知道它的執(zhí)行結(jié)果?

case $1 in

*)

cc $1

;;

*.txt)

lpr $1

;;

*.c)

echo "未知的類型"

esac


一. while 循環(huán)

while 命令格式

while 條件表

do

命令表

done

執(zhí)行過程

Shell首先執(zhí)行條件表,如果條件表的最后一條語句的退出狀態(tài)為零,則執(zhí)行盾環(huán)體內(nèi)的命令表,執(zhí)行完后,再檢查條件表,如果退出狀態(tài)為零將繼續(xù)執(zhí)行,如此循環(huán)往復(fù)直到條件表的最后一條語句的退出狀態(tài)非零. 退出狀態(tài)為零就是條件為真True.

舉例說明 假如shell文件的內(nèi)容如下:

Sum=0

i=0

while true #true是系統(tǒng)的關(guān)鍵詞 表示真

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

if [ $i = "100" ]

then

break;

fi

done

echo $i $Sum

最后這個(gè)程序顯示的是 100 5050

這個(gè)程序的運(yùn)算就是將1到100加起來

下面將這個(gè)程序再改動(dòng)一下

Sum=0

i=0

while [ $i != "100" ]

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

done

echo $i $Sum

改動(dòng)后的程序運(yùn)算結(jié)果和上面是一樣 但程序比上面的要簡練

在這個(gè)循環(huán)中還可以以u(píng)ntil做為測試條件 它正好與while測試的條件相反,也就是當(dāng)條件為假時(shí)將繼續(xù)執(zhí)行循環(huán)體內(nèi)的語句,否則就退出循環(huán)體,下面還用這個(gè)例子.

Sum=0

i=0

until [ $i = "100" ]

do

i=`expr $i + 1`

Sum=`expr $Sum + $i`

done

echo $i $Sum

當(dāng)i不等于100時(shí)循環(huán) 就是當(dāng)條件為假時(shí)循環(huán),否則就退出,而第一個(gè)例子是當(dāng)i不等于100

時(shí)循環(huán),也就是測試條件為真時(shí)循環(huán).

二.for 循環(huán)

命令格式:

for 變量 in 名字列表

do

命令列表

done

這里的名字列表是一個(gè)由空格分隔的字符串列表,shell在執(zhí)行for循環(huán)時(shí)每次依次從名字表中取出一個(gè)字符串賦給循環(huán)變量作為變量的值.

在寫for語句時(shí),也可以省略in 名字列表部分,這表示用當(dāng)前的位置參數(shù)來代替這時(shí)的名字列表.

面舉個(gè)例子,比如在你的電腦中有兩個(gè)目錄,一個(gè)是aa,一個(gè)是bb在這兩個(gè)目錄中有5個(gè)相同的文件,但其中一個(gè)目錄中的一個(gè)或多個(gè)文件剛剛修改過,現(xiàn)在我忘記剛才改的是那幾個(gè)文件 了,那么我靠已知的序碼查找。

程序如下:

for File in a1 a2 a3 a4 a5

do

diff aa/$File bb/$File

done

下面再舉一個(gè)不帶名字列表的例子

for File

do

echo $Filw

done

文件內(nèi)容保存在a.sh中 并可執(zhí)行

我們在執(zhí)行這個(gè)shell程序時(shí)命令行如下:

a.sh a1 a2 a3 a4 a5

執(zhí)行結(jié)果如下:

a1

a2

a3

a4

a5

大家從這個(gè)例子中可以看到命令行的參數(shù)被逐一讀入一次

三.循環(huán)控制語句

break 命令不執(zhí)行當(dāng)前循環(huán)體內(nèi)break下面的語句從當(dāng)前循環(huán)退出.

continue 命令是程序在本循體內(nèi)忽略下面的語句,從循環(huán)頭開始執(zhí)行.

總結(jié)

以上是生活随笔為你收集整理的Shell常见知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。