国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Shell常見知識

2024-08-27 23:57:48
字體:
來源:轉載
供稿:網友

一、用戶登陸進入系統后的系統環境變量

$HOME 使用者自己的目錄 
$PATH 執行命令時所搜尋的目錄 
$TZ 時區 
$MAILCHECK 每隔多少秒檢查是否有新的信件 
$PS1 在命令列時的提示號 
$PS2 當命令尚未打完時,Shell 要求再輸入時的提示號 
$MANPATH man 指令的搜尋路徑 

二、特殊變量

$0 這個程序的執行名字 
$n 這個程序的第n個參數值,n=1..9 
$* 這個程序的所有參數 
$# 這個程序的參數個數 
$$ 這個程序的PID 
$! 執行上一個指令的PID 
$? 執行上一個指令的返回值 

三、shell中的變元

* 任意字符串 
? 一個任意字符 
[abc] a, b, c三者中之一 
[a-n] 從a到n的任一字符 

四、幾個特殊字符表示

b 退回 
c 打印一行時沒有換行符 這個我們經常會用到 
f 換頁 
r 回車 
t 制表 
v 垂直制表 
/ 反斜線本身 

五、判斷文件的屬性

格式:-操作符 filename 
-e 文件存在返回1, 否則返回0 
-r 文件可讀返回1,否則返回0 
-w 文件可寫返回1,否則返回0 
-x 文件可執行返回1,否則返回0 
-o 文件屬于用戶本人返回1, 否則返回0 
-z 文件長度為0返回1, 否則返回0. 
-f 文件為普通文件返回1, 否則返回0 
-d 文件為目錄文件時返回1, 否則返回0 

六、測試字符串

字符串1 = 字符串2 當兩個字串相等時為真 
字符串1 != 字符串2 當兩個字串不等時為真 
-n 字符串    當字符串的長度大于0時為真 
-z 字符串  當字符串的長度為0時為真 
字符串 當串字符串為非空時為真 

七、測試兩個整數關系

數字1 -eq 數字2 兩數相等為真 
數字1 -ne 數字2 兩數不等為真 
數字1 -gt 數字2 數字1大于數字2為真 
數字1 -ge 數字2   數字1大于等于數字2為真 
數字1 -lt 數字2 數字1小于數字2為真 
數字1 -le 數字2 數字1小于等于數字2為真 

八、邏輯測試

-a     與 
-o  或 
!非

 

shell中的特殊字符有 

1、$ 美元符 
2、 反斜杠 
3、` 反引號 
4、" 雙引號 
5、< ,>,*,?,[,] 

下面我一一舉列說明 

一、$符號

1、echo $? 顯示的是上一條指令退出狀態 
2、echo "$?" 效果同上 
3、echo '$?' 顯示的是$? 
4、echo $? 顯示的是$? 
5、echo "$?" 顯示的是$? 

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

二、反斜杠

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

A=1234 
echo $A 顯示為$A 如果不加將顯示為1234 
echo ` 顯示為` 
echo " 顯示為雙引號 
echo / 顯示為 

三、` 反引號

反引號的功能是命令替換,將反引號中的字符串做為命令來執行,我們在用shell編程時經常用的到 將系統命令的執行結果賦給一個變量 
A=`date` 
echo $A 顯示的不是date而是當時的時間串 
比如有一文件A的內容如下  
ABCDEFG 
1234456 
abcdefg 
B=`cat A|grep 234` # 檢索文件A中含有字符串234的行 
echo $B 將顯示為1234456 
echo "$B" 將顯示為什么? 
echo "$B" 將顯示為什么?讀者自己試試 

四、" 雙引號

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

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

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

echo """ 
echo "$" 
echo "" 
echo "`" 

以上不是你所期望的結果,因為雙引號對它們不起作用,你只能這樣才能輸出這些特殊字符的原形 

echo '"' 
echo '$' 
echo '' 
echo '`' 
或 
echo """ 
echo "$" 
echo "/" 
echo "`" 
將分別顯示為 " $ ` 

五、其它特殊字符

大家注意到,除了前四個特殊字符外,我將其它的特殊字符都放在一塊,這是因為前四個特殊字符在雙引號中還是具有特殊含義,所以單獨拿出來講,除此以外的特殊字符如果你要輸出這些特殊字符的原形,你就可以用雙引號或單引號引起來使其失去特殊含義。

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

一、if 條件語句 

格式: 
if 條件表達式 
then #當條件為真時執行以下語句 
命令列表 
else #為假時執行以下語句 
命令列表 
fi 
if 語句也可以嵌套使用 
if 條件表達式1 
then 
if 條件表達式2 
then 
命令列表 
else 
if 條件表達式3 
then 
命令列表 
else 
命令列表 
fi 
fi 
else 
命令列表 
fi 

你可以進行多層嵌套 一個if語句一定要跟一個fi 表示該層條件結束否則會造成語法錯誤結合前面講的 舉例如下: 

這里先講一個條件語句中用到的命令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 

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

假如我們現在將這個例子保存為prfile 

chmod +x prfile 

執行剛才的程序 

./prfile aaa 

這個例子是檢查你的輸入的參數是否是一個文件 如果是就打印 如果是一個目錄 先轉目錄再打印 如果即不是文件也不是目錄給出提示 

二、多重條件測試語句case

格式: 
case 字串 in 
模式) 命令列表;; 
模式) 命令列表;; 
.... 
esac 

多重條件語句是以case 開始以esac結束 中間可以有多個條件列表 功能是測試字串和和里面的模式有沒有匹配的,有就執行里面的命令列表 模式也可以是*號 表示任意字串,每個模式里面的最后要心;;雙引號結束,否則會發生語法錯誤。

現舉例如下:

  1. case $1 in  
  2. *.c)  
  3. cc $1  
  4. ;;  
  5. *.txt)  
  6. lpr $1  
  7. ;;  
  8. *)  
  9. echo "未知的類型"  
  10. esac  

假如將以上內容保存在文件abc中 

chmod +x abc 

執行 ./abc a.c   將會對文件a.c進行編譯 

執行 ./abc readme.txt 將會把文件通過打印機 

假如我將以上內容改一下,你是否會知道它的執行結果? 

case $1 in 
*) 
cc $1 
;; 
*.txt) 
lpr $1 
;; 
*.c) 
echo "未知的類型" 
esac

一. while 循環

while 命令格式 

while 條件表 

do 

命令表 

done 

執行過程 

Shell首先執行條件表,如果條件表的最后一條語句的退出狀態為零,則執行盾環體內的命令表,執行完后,再檢查條件表,如果退出狀態為零將繼續執行,如此循環往復直到條件表的最后一條語句的退出狀態非零. 退出狀態為零就是條件為真True. 

舉例說明 假如shell文件的內容如下: 

  1. Sum=0  
  2. i=0  
  3. while true #true是系統的關鍵詞 表示真  
  4. do  
  5. i=`expr $i + 1`  
  6. Sum=`expr $Sum + $i`  
  7. if [ $i = "100" ]  
  8. then  
  9. break;  
  10. fi  
  11. done  
  12. echo $i $Sum  

最后這個程序顯示的是 100 5050 

這個程序的運算就是將1到100加起來 

下面將這個程序再改動一下

  1. Sum=0  
  2. i=0  
  3. while [ $i != "100" ]  
  4. do  
  5. i=`expr $i + 1`  
  6. Sum=`expr $Sum + $i`  
  7. done  
  8. echo $i $Sum  

改動后的程序運算結果和上面是一樣 但程序比上面的要簡練 

在這個循環中還可以以until做為測試條件 它正好與while測試的條件相反,也就是當條件為假時將繼續執行循環體內的語句,否則就退出循環體,下面還用這個例子. 

  1. Sum=0  
  2. i=0  
  3. until [ $i = "100" ]  
  4. do  
  5. i=`expr $i + 1`  
  6. Sum=`expr $Sum + $i`  
  7. done  
  8. echo $i $Sum  

當i不等于100時循環 就是當條件為假時循環,否則就退出,而第一個例子是當i不等于100 時循環,也就是測試條件為真時循環. 

二.for 循環

命令格式: 
for 變量 in 名字列表 
do 
命令列表 
done 

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

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

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

  1. for File in a1 a2 a3 a4 a5  
  2. do  
  3. diff aa/$File bb/$File  
  4. done  

下面再舉一個不帶名字列表的例子 

for File 
do 
echo $Filw 
done 

文件內容保存在a.sh中 并可執行 

我們在執行這個shell程序時命令行如下: 

a.sh a1 a2 a3 a4 a5 

執行結果如下: 

a1 
a2 
a3 
a4 
a5 

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

三.循環控制語句

break 命令不執行當前循環體內break下面的語句從當前循環退出.

continue 命令是程序在本循體內忽略下面的語句,從循環頭開始執行.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武义县| 廉江市| 咸丰县| 佛冈县| 南投县| 临洮县| 嘉峪关市| 信丰县| 施秉县| 彰化县| 广西| 建昌县| 鄂温| 光山县| 乐东| 米泉市| 兴化市| 团风县| 博乐市| 白河县| 高阳县| 聂拉木县| 工布江达县| 琼中| 布拖县| 东乌珠穆沁旗| 蓝山县| 安庆市| 扶风县| 莱州市| 天水市| 汝城县| 平利县| 鄂托克旗| 中方县| 福建省| 固镇县| 塔城市| 贵州省| 松原市| 西城区|