linux shell command

1、ps:查看進程

 

2、kill:結束進程

 

3、sleep:使正在執行的進程在規定時間內進入休眠狀態

 

4、man:獲取命令的幫助信息
man command


5、pwd:查找自己所在的位置

 

6、find:在子目錄中搜索匹配的文件
語法:
[root @test /root ]# find [路徑] [參數]
參數說明:
1. 時間:
-atime n :將n*24小時內被存取過的文件列出來
-ctime n :將n*24小時內被改變、新增的文件或目錄列出來
-mtime n :將n*24小時內被修改過的文件列出來
-newer file :把比file還要新的文件列出來
2. 使用名稱:
-gid n :尋找羣組ID爲n的文件
-group name :尋找羣組名稱爲name的文件
-uid n :尋找擁有者ID爲n的文件
-user name :尋找用戶名稱爲name的文件
-name file :尋找文件名爲file的文件名稱(可以使用通配符)
-type type :尋找文件屬性爲type的文件,type包含了b, c, d, p, l, s,
這些與前一章的屬性相同。例如l爲Link而d爲目錄
範例:
[root @test /root]# find / -name testing <==尋找文件名爲testing
[root @test /root]# find / -name 'test*' <==尋找文件名包含test的
[root @test /root]# find . -ctime 1
尋找當前目錄下一天內新增的目錄或文件
[root @test /root]# find /home/test –newer .bashrc
尋找/home/test目錄下比.bashrc還要新的文件


7、whereis:查找文件
[root @test /root ]# whereis [-bmsu] [目錄名稱]
參數說明:
-b :只找二進制文件
-m :只找在說明文件manual路徑下的文件
-s :只找source源文件
-u :沒有說明文檔的文件!
範例:
[root @test /root]# whereis passwd


8、locate:定位文件
[root @test /root ]# locate [目錄名稱]


9、whatis:獲取命令簡介

 

10、ls:顯示當前目錄下的內容
使用ls命令列出/root目錄下的隱藏文件與相關的屬性參數。
[root @test /root ]# ls [-ailS]
[root@test /root]# ls -al /root

參數說明:
-a :列出所有文件(連同隱藏文檔)
-i :打印inode的值
-l :詳細列出,連同文件大小、屬性數據等
-S :以文件大小排序

11、dir:把文件按列對齊輸出

 

12、vdir:缺省地列出文件的全部信息

 

13、cat:把一個或多個文件內容顯示到標準輸出
[root @test /root ]# cat [-n]
參數說明:
-n: 顯示時,連行號一起輸出到屏幕上


14、more:使你在瀏覽文件時可以一次閱讀一屏或者一行
[root @test /root ]# more [文件名]


15、less:與more類似但功能更強
[root @test /root ]# less [文件名]


16、head:顯示文件頭部
[root @test /root ]# head [-n number] [文件名]
[root @test /root]# head ~/.bashrc <==默認情況下,顯示前10行
[root @test /root]# head -n 20 ~/.bashrc <==顯示前20行

17、tail:顯示文件尾部
[root @test /root ]# tail [-n number] [文件名]
[root @test /root]# tail ~/.bashrc
[root @test /root]# tail -n 5 ~/.bashrc <==只顯示最後5行

18、rm:刪除一個或多個文件
[root @test /root ]# rm [-fir] [文件名]
參數說明:
-i :提供用戶確認(這是默認值)。
-r :循環刪除,直到沒有東西爲止。
-f :force,就是強制刪除。


19、touch:創建一個或多個文件

 

20、mkdir:創建一個或多個目錄
[root @test /root ]# mkdir [目錄名稱]


21、rmdir:刪除一個或多個目錄
[root @test /root ]# rmdir [目錄名稱]


22、mv:移動或者更改文件
[root @test /root ]# mv [-u] [源文件] [目標文件]
參數說明:
-u :同樣,爲update的簡寫,當源文件比目標文件還新時纔會動作!


23、cp:拷貝文件或目錄
[root @test /root ]# cp [-drsu] [源文件] [目標文件]
cp 來源文件 目的文件
cp .bashrc .bashrc_test

-d :進行復制時,如果是複製到鏈接文件,若不加任何參數,則默認情況下會將鏈接到的源文件
複製到目的地,若加-d,則鏈接文件可原封不動地將鏈接這個快捷方式複製到目的地。
-r :可以進行目錄的複製。
-s :做成鏈接文件,與ln指令功能相同。
-u, --update:如果源文件較新,或者沒有目標文件,纔會進行復制動作。可用於備份操作。


24、ln:爲文件建立鏈接
[root @test /root ]# ln [-s] [源文件] [目標文件]
-s :提供符號鏈接
:如果直接使用ln而不加任何參數,就屬於硬鏈接

[root @test test]# ln passwd passwd-hard
[root @test test]# ln -s passwd passwd-soft

25、grep:在文件內進行搜索

 

26、tar:壓縮與解壓縮

 

27、gzip:壓縮與解壓縮

 

28、compress:壓縮

 

29、uncompress:解壓縮

 

30、vi:進入vim編輯器

 

32、ifconfig:網卡配置

 

33、ifup:啓動網卡

 

34、ifdown:禁用網卡

 

35、hostname:顯示或設置系統的超級用戶

 

36、useradd:增加用戶

 

37、userdel:刪除用戶

 

38、usermod:修改用戶

 

39、groupadd:增加組

 

40、groupdel:刪除組

 

41、groupmod:修改組

 

42、passwd:設置密碼

 

43、chpasswd:用文件配置設置密碼

 

44、chown:改變文件所有權
改變擁有者chown
chown [ -R ] 賬號名稱[:羣組名稱]文件或目錄
chown test tmp
chown –R root:root tmp
參數說明:
-R :循環地將該目錄下的所有文件都改成 user 與 group 的名稱

45、chgrp:改變用戶分組
chgrp 羣組名稱 文件或目錄
chgrp users tmp

46、chmod:改變文件屬性
改變權限chmod
chmod [-R] xyz 文件或目錄
其中,xyz爲同三組rwx屬性數值的相加
chmod 777 .bashrc
增加.bashrc這個文件的每個人均可寫入的權 chmod a+w .bashrc

要取消所有人的x屬性
chmod a-x .bashrc

參數說明:
-R :循環地將該目錄的文件都改變

47、fdisk:對磁盤做分區
[root @test /root ]# fdisk [-l] [設備名稱]


48、mke2fs:建立ext2/3文件系統
[root @test /root ]# mke2fs [-b block-size] [-i inode-size]
參數說明:
-b :設定每個數據塊佔用的大小,目前支持的大小有
1024, 2048和4096 三種
-i :設定 inode 值
-c :檢查磁盤錯誤,會比較慢
-L :設定這個扇區的label(表頭名稱)
-j :建立ext3這個具有日誌管理功能的文件格式

49、mkswap:建立swap文件系統

 

50、mount:掛載文件系統
語法:
[root @test /root ]# mount [-ahlV]
[root @test /root ]# mount -t type /dev/hdxx /mountpoint
[root @test /root ]# mount -o [options]
[root @test /root ]# umount /mountpoint
參數說明:
-a :依照/etc/fstab的內容裝載所有相關的硬盤
-h :只列出mount相關的參數,並不裝載任何設備
-l :列出當前已經裝載的設備、文件系統名稱與裝載點
-V :列出mount的版本信息
type :將後面/dev/hdxx設備以type的文件格式裝載到
/mountpoint這個點。常見的type有下面幾個:
vfat, msdos :是支持Windows系統的文件格式,其中vfat較常用
ext, ext2 :是Linux的主要文件格式
iso9660 :光驅的文件格式
nfs, ntfs, ufs :Windows 2000使用的NTFS格式
-o :這個參數後面接的項很多,如下:
rw :讓裝載的硬盤爲可擦寫
suid :允許該硬盤配置文件爲SUID狀態
exec :允許該硬盤執行二進制文件
auto :允許該硬盤使用mount -a參數設定
nouser :禁止他人(非root用戶)使用裝載功能,這是默認值。
async :允許硬盤進行異步記錄(內存與硬盤不同步,最常用)
defaults:同時具有rw, suid, dev, exec, auto, nouser, async這些功能
nosuid :不許該硬盤具有SUID文件屬性
ro :設定爲只讀屬性
remount :讓系統已經裝載的硬盤重新被裝載
[root @test /root]# mount -a
[root @test /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom
裝載光驅
[root @test /root]# mount -t vfat /dev/fd0 /mnt/floppy
裝載Windows文件系統的軟驅
[root @test /root]# mount -t ext2 /dev/fd0 /mnt/floppy
裝載Linux文件系統的軟驅
[root @test /root]# mount -t ext2 /dev/hdc6 /home
裝載Linux文件格式的硬盤
[root @test /root]# mount -o remount,rw /

51、umount:卸載文件系統
語法:
[root @test root]# umount [-f] [device|mount_point]
參數說明:
-f :強制將該文件系統退出,最常使用在無法退出的NTFS文件系統中
範例:
[root @test root]# umount /home


52、su:改變用戶身份以成爲超級用戶

 

53、sudo:臨時以管理員身份運行命令

 

54、rpm:軟件包管理

 

55、uname:查看Linux內核版本

 

56、insmod:安裝核心模塊

 

57、modprobe:從Linux內核中添加或刪除模塊

 

58、lsmod:列出系統所安裝的模塊

 

59、rmmod:卸載模塊

 

60、cmp:比較兩個文件,給出第一個差別字符的位置和行號

 

61、diff:比較兩個文件,按序顯示差別行

 

62、diff3:比較兩個文件

 

63、sdiff:使用交互方式來合併文件,並以逐字格式顯示文件。

 

64、apt-get:軟件包管理,自動解決依賴關係

 

65、shutdown:在規定時間內關機

 

66、aptitude:軟件包管理,很強大

 

67、date:顯示當前時間
顯示日期的指令:date
[root@test root]# date +%Y/%m/%d
2002/10/16
[root@test root]# date +%H:%M
15:32
+%Y%m%d是date的一些參數功能。

68、who:所有當前正在使用Linux系統的人或者用戶的列表。

 

69、clear:清屏

 

70、分號:命令分割符

 

71、cd:切換當前目錄
. 代表當前層目錄
.. 代表上層目錄
~ 代表自己的根目錄
~user 代表到user這個人的根目錄
[root @test /root ]# cd [相對路徑或絕對路徑]

72、info:獲取命令的幫助信息

顯示日曆的指令:cal
也就是說,cal的語法爲:
[root@test root]# cal [month] [year]

Ctrl + c:在Linux下,如果輸入了錯誤的指令或參數,有時候系統會一直運行而不停止,
這個時候怎麼辦?別擔心,如果您想讓當前程序終止,可以鍵入Ctrl + c,這就是中斷當前
程序的按鍵。
q:有很多程序在運行的時候(例如man指令或more指令),如果想跳出來,按下q即
可!這個按鍵也是很多指令常定義的退出鍵。

[root @test /root ]# nl [文件名] 即查看文件的同時可以顯示行號

od [文件名] od指令用於讀取非ASCII數據文件,例如二進制文件


[root @test /root ]# which [文件名稱]

 

vi

h 或向左方向鍵 光標向左移動一個字符
j 或 向下方向鍵 光標向下移動一個字符
k 或向上方向鍵 光標向上移動一個字符
l 或向右方向鍵 光標向右移動一個字符
Ctrl + f 屏幕向前翻動一頁(常用)
Ctrl + b 屏幕向後翻動一頁(常用)
Ctrl + d 屏幕向前翻動半頁
Ctrl + u 屏幕向後翻動半頁
+ 光標移動到非空格符的下一列
- 光標移動到非空格符的上一列
n<space> 按下數字後再按空格鍵,光標會向右移動這一行的n個字符。例如
20<space>,則光標會向右移動20個字符
0 (這是數字0)移動到這一行的第一個字符處(常用)
$ 移動到這一行的最後一個字符處(常用)
H 光標移動到這個屏幕最上方的那一行
M 光標移動到這個屏幕中央的那一行
L 光標移動到這個屏幕最下方的那一行
G 移動到這個文件的最後一行(常用)
nG 移動到這個文件的第n行。例如20G,則會移動到這個文件的第20
行(可配合:set nu)
n<Enter> 光標向下移動n行(常用)
一般模式 查找與替換
/word 在光標之後查找一個名爲word的字符串(常用)
?word 在光標之前查找一個名爲word的字符串
第9章 vi文本處理器
151
(續表)
一般模式 查找與替換
:n1,n2s/word1/word2/g 在第n1與n2行之間查找word1這個字符串,並將該字符串替換爲
word2(常用)
:1,$s/word1/word2/g 從第一行到最後一行查找word1字符串,並將該字符串替換爲word2
(常用)
:1,$s/word1/word2/gc 從第一行到最後一行查找word1字符串,並將該字符串替換爲
word2,且在替換前顯示提示符讓用戶確認(conform)(常用)
一般模式刪除、複製與粘貼
x, X x爲向後刪除一個字符,X爲向前刪除一個字符(常用)
nx 向後刪除n個字符
dd 刪除光標所在的那一整列(常用)
ndd 刪除光標所在列的向下n列,例如,20dd則是刪除20列(常用)
d1G 刪除光標所在行到第一行的所有數據
dG 刪除光標所在行到最後一行的所有數據
yy 複製光標所在行(常用)
nyy 複製光標所在列的向下n列,例如,20yy則是複製20列(常用)
y1G 複製光標所在列到第一列的所有數據
yG 複製光標所在列到最後一列的所有數據
p, P p爲複製的數據粘貼在光標下一行,P則爲粘貼在光標上一行(常用)
J 將光標所在列與下一列的數據結合成一列
u 恢復前一個動作(常用)
編輯模式
i, I 插入:在當前光標所在處插入輸入的文字,已存在的字符會向後退
(常用)
a, A 添加:由當前光標所在處的下一個字符開始輸入,已存在的字符會
向後退(常用)
o, O 插入新的一行:從光標所在處的下一行行首開始輸入字符(常用)
r, R 替換:r會替換光標所指的那一個字符;R會一直替換光標所指的文
字,直到按下Esc爲止(常用)
Esc 退出編輯模式,回到一般模式(常用)
命令行模式
:w 將編輯的數據寫入硬盤文件中(常用)
:w! 若文件屬性爲只讀,強制寫入該文件
:q 退出vi(常用)
:q! 若曾修改過文件,又不想保存,使用!爲強制退出不保存文件
:wq 保存後退出,若爲:wq!,則爲強制保存後退出(常用)
:w [filename] 將編輯數據保存爲另一個文件(類似另存新文檔)
第3篇學習Shell
152
(續表)
命令行模式
:r [filename] 在編輯的數據中,讀入另一個文件的數據。亦即將 filename這個文
件內容加到光標所在行的後面
:set nu 顯示行號,設定之後,會在每一行的前面顯示該行的行號
:set nonu 與set nu相反,爲取消行號
n1,n2 w [filename] 將n1到n2的內容保存爲filename這個文件。


bash
設定變量的規則如下:
1. 變量與變量內容以等號“=”連結;
2. 等號兩邊不能直接接空格符;
3. 變量名稱只能是英文字母與數字,其中數字不能是開頭字符;
4. 若有空格符,可以使用雙引號或單引號將變量內容結合起來,但要特別留意,雙引
號內的特殊字符可以保留變量特性,單引號內的特殊字符則僅爲一般字符;
5. 必要時以跳轉字符“\”將特殊符號(如Enter,$,\,空格符,'等)變成一般符號;
6. 在一串指令中,還需要藉助其他指令提供的信息,這時可以使用quote“` command`”;
7. 若該變量爲擴增變量內容時,則需以雙引號及$變量名稱(如"$PATH":/home)繼續
累加內容;
8. 若該變量需要在其他子程序執行,則以export使變量可以動作,如export PATH;
9. 通常大寫字符爲系統預設變量,自定義變量可以使用小寫字符,方便判斷(純粹依
照用戶興趣與嗜好);
10. 取消變量的方法爲:unset 變量名稱。

[test @tset test]# alias lm='ls -al | more'
[test @test test]# history


RegExp
符號 內容
* 通配符,代表任意字符(0到多個)
? 通配符,代表一個字符
# 註釋,這個最常用在腳本中,視爲說明
\ 跳轉符號,將特殊字符或通配符還原成一般字符
| 分隔兩個管線命令的界定
; 連續性命令的界定(注意,與管線命令不同)
~ 用戶的根目錄
$ 即變量前需要加的變量值
& 將指令變成在背景下工作
! 邏輯運算中的“非”(not)
第3篇學習Shell
170
(續表)
符號 內容
/ 路徑分隔符號
>, >> 輸出導向,分別爲“取代”與“累加”
' 單引號,不具有變量置換功能
" 具有變量置換功能
` ` 兩個“`”中間爲可以先執行的指令
( ) 中間爲子shell的起始與結束
[ ] 中間爲字符組合
{ } 中間爲命令區塊組合
組合鍵 執行結果
Ctrl + C 終止當前命令
Ctrl + D 輸入結束(EOF),例如郵件結束的時候
Ctrl + M 就是Enter
Ctrl + S 暫停屏幕的輸出
Ctrl + Q 恢復屏幕的輸出
Ctrl + U 在提示符下,將整行命令刪除
Ctrl + Z 暫停當前命令

命令重定向
標準輸入:代碼爲0,或稱爲stdin,使用方式爲<


· 標準輸出:代碼爲1,或稱爲stdout,使用方式爲1>
· 錯誤輸出:代碼爲2,或稱爲stderr,使用方式爲2>
基本的指令書寫方式爲:
指令 >
2>
>>
<
設備或文件
左邊一定是指令,右邊則可能是設備或文件。
注意,1>與2>之間沒有空格符。相關使用說明舉例如下:
[test @test test]# ls -al > list.txt
將顯示結果輸出到 list.txt 文件中,若該文件已存在則予以取代
[test @test test]# ls -al >> list.txt
將顯示結果累加到list.txt 文件中,該文件爲累加的,舊數據保留!
[test @test test]# ls -al 1> list.txt 2> list.err
將顯示數據正確輸出到 list.txt,錯誤的數據輸出到list.err
[test @test test]# ls -al 1> list.txt 2>&1
將顯示數據不論正確或錯誤均輸出到list.txt中。注意,錯誤與正確信息輸出到同一個文件中,則
必須以上面的方法來寫,不能寫成其他格式
[test @test test]# ls -al 1> list.txt 2> /dev/null
將顯示的數據,正確的輸出到list.txt,錯誤的數據予以丟棄!

shell腳本編寫技巧

1.test測試命令
test命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試,
其測試符和相應的功能分別如下:
(1)數值測試:
-eq:等於則爲真
-ne:不等於則爲真
-gt:大於則爲真
-ge:大於等於則爲真
-lt:小於則爲真
-le:小於等於則爲真
(2)字符串測試:
=:等於則爲真
!=:不相等則爲真
-z 字符串:字符串長度僞則爲真
-n 字符串:字符串長度不僞則爲真
(3)文件測試:
-e 文件名:如果文件存在則爲真
-r 文件名:如果文件存在且可讀則爲真
-w 文件名:如果文件存在且可寫則爲真
-x 文件名:如果文件存在且可執行則爲真
-s 文件名:如果文件存在且至少有一個字符則爲真
-d 文件名:如果文件存在且爲目錄則爲真
-f 文件名:如果文件存在且爲普通文件則爲真
-c 文件名:如果文件存在且爲字符型特殊文件則爲真
-b 文件名:如果文件存在且爲塊特殊文件則爲真
另外,Linux還提供了與(“!”)、或(“-o)、非(“-a”)三個邏輯操作符用於將測試條件連接起來,
其優先級爲:“!”最高,“-a”次之,“-o”最低。
同時,bash也能完成簡單的算術運算,格式如下:
$[expression]
例如:var1=2
var2=$[var1*10+1]
則:var2的值爲21。

2.if條件語句
if [ -x /sbin/quotaon ]; then
echo "Turning on Quota for root filesystem"
/sbin/quotaon /
elif [ -x /sbin/quotaon ]; then
/usr/bin/bash
else
echo "ok"
fi

3.for 循環
#!/bin/sh
WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"
for i in $WORD ; do
echo $i
done

#!/bin/sh
FILES=`ls /txt/*.txt`
for txt in $FILES ; do
doc=`echo $txt | sed "s/.txt/.doc/"`
mv $txt $doc
done

4.while和until 循環
#!/bin/sh
while [ -f /var/run/ppp0.pid ] ; do
killall pppd
done

#!/bin/sh
until [ -f /var/run/ppp0.pid ] ; do
sleep 1
done

Shell還提供了true和false兩條命令用於建立無限循環結構的需要,
它們的返回狀態分別是總爲0或總爲非0

5.case 條件選擇
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac
case表達式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。

6.無條件控制語句break和continue
break 用於立即終止當前循環的執行,而contiune用於不執行循環中後面的語句
而立即開始下一個循環的執行。這兩個語句只有放在do和done之間纔有效。

7.函數定義
在shell中還可以定義函數。函數實際上也是由若干條shell命令組成的,
因此它與shell程序形式上是相似的,不同的是它不是一個單獨的進程,
而是shell程序的一部分。函數定義的基本格式爲:
functionname
{
若干命令行
}
調用函數的格式爲:
functionname param1 param2 ……
shell函數可以完成某些例行的工作,而且還可以有自己的退出狀態,
因此函數也可以作爲if、while等控制結構的條件。
在函數定義時不用帶參數說明,但在調用函數時可以帶有參數,此時
shell將把這些參數分別賦予相應的位置參數$1、$2、...及$*。

8.命令分組
在shell中有兩種命令分組的方法:“()”和“{}”,前者當shell執行()
中的命令時將再創建一個新的子進程,然後這個子進程去執行圓括弧中的命令。
當用戶在執行某個命令時不想讓命令運行時對狀態集合(如位置參數、環境變量、
當前工作目錄等)的改變影響到下面語句的執行時,就應該把這些命令放在圓括
弧中,這樣就能保證所有的改變只對子進程產生影響,而父進程不受任何干擾;
{}用於將順序執行的命令的輸出結果用於另一個命令的輸入(管道方式)。當我們
要真正使用圓括弧和花括弧時(如計算表達式的優先級),則需要在其前面加上轉
義符()以便讓shell知道它們不是用於命令執行的控制所用。

9.信號
trap命令用於在shell程序中捕捉到信號,之後可以有三種反應方式:
(1)執行一段程序來處理這一信號
(2)接受信號的默認操作
(3)忽視這一信號
trap對上面三種方式提供了三種基本形式:
第一種形式的trap命令在shell接收到signal list清單中數值相同的信號時,
將執行雙引號中的命令串。
trap 'commands' signal-list
trap "commands" signal-list
爲了恢復信號的默認操作,使用第二種形式的trap命令:
trap signal-list
第三種形式的trap命令允許忽視信號:
trap " " signal-list
注意:
(1)對信號11(段違例)不能捕捉,因爲shell本身需要捕捉該信號去進行內存的轉儲。
(2)在trap中可以定義對信號0的處理(實際上沒有這個信號),shell程序在其終止
(如執行exit語句)時發出該信號。
(3)在捕捉到signal-list中指定的信號並執行完相應的命令之後,如果這些命令沒有將
shell程序終止的話,shell程序將繼續執行收到信號時所執行的命令後面的命令,這樣
將很容易導致shell程序無法終止。
另外,在trap語句中,單引號和雙引號是不同的,當shell程序第一次碰到trap語句時,
將把commands中的命令掃描一遍。此時若commands是用單引號括起來的話,那麼shell
不會對commands中的變量和命令進行替換,否則commands中的變量和命令將用當時具體
的值來替換。

10. 運行shell程序的方法
執行shell程序的方法有三種:
(1)sh shell程序文件名
格式爲:
bash shell 程序文件名
這實際上是調用一個新的bash命令解釋程序,而把shell程序文件名作爲參數傳遞給它。
新啓動的shell將去讀指定的文件,執行文件中列出的命令,當所有的命令都執行完結束。
該方法的優點是可以利用shell調試功能。
(2)sh

11. bash程序的調試
bash -選擇項 shell程序文件名
幾個常用的選擇項是:
-e:如果一個命令失敗就立即退出
-n:讀入命令但是不執行它們
-u:置換時把未設置的變量看作出錯
-v:當讀入shell輸入行時把它們顯示出來
-x:執行命令時把命令和它們的參數顯示出來
上面的所有選項也可以在shell程序內部用“set -選擇項”的形式引用,而“set +選擇項”則
將禁止該選擇項起作用。如果只想對程序的某一部分使用某些選擇項時,則可以將該部分用
上面兩個語句包圍起來。
1.未置變量退出和立即退出
未置變量退出特性允許用戶對所有變量進行檢查,如果引用了一個未賦值的變量就終止shell
程序的執行。shell通常允許未置變量的使用,在這種情況下,變量的值爲空。如果設置了未
置變量退出選擇項,則一旦使用了未置變量就顯示錯誤信息,並終止程序的運行。未置變量退
出選擇項爲“-u”。
當shell運行時,若遇到不存在或不可執行的命令、重定向失敗或命令非正常結束等情況時,如
果未經重新定向,該出錯信息會打印在終端屏幕上,而shell程序仍將繼續執行。要想在錯誤發
生時迫使shell程序立即結束,可以使用“-e”選項將shell程序的執行立即終止。
2.shell程序的跟蹤
調試shell程序的主要方法是利用shell命令解釋程序的“-v”或“-x”選項來跟蹤程序的執行。“-v”
選擇項使shell在執行程序的過程中,把它讀入的每一個命令行都顯示出來,而“-x”選擇項使shell
在執行程序的過程中把它執行的每一個命令在行首用一個“+”加上命令名顯示出來。並把每一個變量
和該變量所取的值也顯示出來,因此,它們的主要區別在於:在執行命令行之前無“-v”則打印出命
令行的原始內容,而有“-v”則打印出經過替換後的命令行的內容。
除了使用shell的“-v”和“-x”選擇項以外,還可以在shell程序內部採取一些輔助調試的措施。
例如,可以在shell程序的一些關鍵地方使用echo命令把必要的信息顯示出來,它的作用相當於C語
言中的printf語句,這樣就可以知道程序運行到什麼地方及程序目前的狀態。

12. bash的內部命令
bash命令解釋程序包含了一些內部命令。內部命令在目錄列表時是看不見的,它們由shell本身提供。
常用的內部命令有:echo、eval、exec、export、readonly、read、shift、wait和點(.)。
下面簡單介紹其命令格式和功能。
1.echo
命令格式:echo arg
功能:在屏幕上打印出由arg指定的字符串。
2.eval
命令格式:eval args
功能:當shell程序執行到eval語句時,shell讀入參數args,並將它們組合成一個新的命令,然後
執行。
3.exec
命令格式:exec 命令 命令參數
功能:當shell執行到exec語句時,不會去創建新的子進程,而是轉去執行指定的命令,
當指定的命令執行完時,該進程,也就是最初的shell就終止了,所以shell程序中exec
後面的語句將不再被執行。
4.export
命令格式:export 變量名 或:export 變量名=變量值
功能:shell可以用export把它的變量向下帶入子shell從而讓子進程繼承父進程中的環境變量。
但子shell不能用export把它的變量向上帶入父shell。
注意:不帶任何變量名的export語句將顯示出當前所有的export變量。
5.readonly
命令格式:readonly 變量名
功能:將一個用戶定義的shell變量標識爲不可變的。不帶任何參數的readonly命令將顯示出
所有隻讀的shell變量。
6.read
命令格式:
read變量名錶
功能:從標準輸入設備讀入一行,分解成若干字,賦值給shell程序內部定義的變量。
7.shift語句
功能:shift語句按如下方式重新命名所有的位置參數變量:$2成爲$1,$3成爲$2……在程序中
每使用一次shift語句,都使所有的位置參數依次向左移動一個位置,並使位置參數“$#”減一,
直到減到0。
8.wait
功能:是shell等待在後臺啓動的所有子進程結束。Wait的返回值總是真。
9.exit
功能:退出shell程序。在exit之後可有選擇地指定一個數字作爲返回狀態。
10.“.”(點)
命令格式:. Shell程序文件名
功能:使shell讀入指定的shell程序文件並依次執行文件中的所有語句。

13. 特殊參數:
1. $*: 代表所有參數,其間隔爲IFS內定參數的第一個字元
2. $@: 與*星號類同。不同之處在於不參照IFS
3. $#: 代表參數數量
4. $?: 執行上一個指令的返回值
5. $-: 最近執行的foreground pipeline的選項參數
6. $$: 本身的Process ID
7. $!: 執行上一個背景指令的PID
8. $_: 顯示出最後一個執行的命令
9. &&: 只有前一條命令執行成功纔會執行後一條命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章