1. 程式人生 > >Linux常用命令大全(四)

Linux常用命令大全(四)

Linux常用命令大全(四)

shell的特點

☆組合新命令 ☆提供了檔名擴充套件字元
☆直接使用shell的內建命令 ☆靈活地使用資料流
☆結構化的程式模組 ☆在後臺執行命令
☆可配置的環境 ☆高階的命令語言

shell的種類

• (1)Bourne shell(簡稱sh)
• (2)C shell(簡稱csh)
• (3)Korn shell(簡稱ksh)
• (4)Bourne Again shell(即bash)

執行shell指令碼的方式

執行shell指令碼的方式基本上有三種:

(1)輸入定向到shell指令碼
 $ bash < 指令碼名
(2)以指令碼名作為引數
其一般形式是:  $ bash  指令碼名  [引數]

如果以目前shell(以•表示)執行一個shell指令碼,則可以使用如下簡便形式:
$ • 指令碼名 [引數]

(3)將shell指令碼的許可權設定為可執行,然後在提示符下直接執行它。
 $ chmod  a+x  ex2
 $ PATH=$PATH:.
 $ ex2
注意,此時該指令碼所在的目錄應被包含在命令搜尋路徑(PATH)中
格 式 意 義

!! 重複上一條命令,也就是“!-1”
!n 重新執行第n條歷史命令
!-n 重新執行倒數第n條歷史命令。!-1就等於! !
!string 重新執行以字串string開頭的最近的歷史命令列。
!?string? 重新執行最近的、包含字串string的那條歷史命令
!# 到現在為止所輸入的整個命令列

名稱補全

• 可以輸入目錄名或檔名的開頭部分,然後按Tab鍵,Linux根據輸入的字母查詢以這些字母開頭的目錄或檔案,並自動補全剩餘的部分。
字母+兩次Tab鍵:顯示以該字母開頭的所有命令

定義別名:

一般語法格式為: alias [name[=value]]…
• 如果沒有指定引數,將在標準輸出(螢幕)上顯示別名清單
• name別名名稱,value別名所代表的內容
• 定義別名時,往往用單引號將它代表的內容括起來,從而防止shell對其中的內容產生歧義,如對空格和特殊字元另作解釋

取消別名;

• 如果想取消先前定義的別名,可使用如下命令:
unalias name…
• 可以一次將所有的別名都從別名表中刪除,使用如下命令:
unalias -a

萬用字元
1.一般萬用字元

• *(星號),它匹配任意字元的0次或多次出現
• ?(問號),它匹配任意一個字元
• [ ](一對方括號),其中有一個字元組。其作用是匹配該字元組所限定的任何一個字元
• !(驚歎號),如果它緊跟在一對方括號的左方括號([)之後,則表示不在一對方括號中所列出的字元

2.模式表示式 ——是那些包含一個或多個萬用字元的字

• *(模式表)——匹配給定模式表中“模式”的0次或多次出現,各模式之間以“|”分開(下同)
• +(模式表)——匹配給定模式表中“模式”的1次或多次出現
• ?(模式表)——匹配模式表中任何一種“模式”的0次或1次出現
• @(模式表)——僅匹配模式表中給定“模式”的一次出現
• !(模式表)——除給定模式表中的一個“模式”之外,可以匹配其他任何東西

引號;

1.雙引號
• 由雙引號括起來的字元(除$、倒引號(`)和反斜線()外)均作為普通字元對待。
2.單引號
• 由單引號括起來的字元都作為普通字元出現
3.倒引號
• 倒引號括起來的字串被shell解釋為命令列,在執行時,shell會先執行該命令列,並以它的標準輸出結果取代整個倒引號部分。
• 倒引號還可以巢狀使用。但應注意,巢狀使用時內層的倒引號必須用反斜線()將其轉義。

. 特殊字串引用的例外
引用雙引號、單引號和轉意符都不能消除對echo命令有特殊功能的控制字串的特殊含義。這些控制字串是:
\b 退格
\c 顯示後不換行
\f 在終端上螢幕的開始處顯示
\n 換行
\r 回車
\t 製表符
\v 垂直製表符
\ 反斜槓

輸入、輸出重定向

• 自動開啟三個標準檔案,即標準輸入檔案(stdin),標準輸出檔案(stdout)和標準出錯輸出檔案(stderr)。

1.輸入重定向符

• 一般形式是:命令 < 檔名
如:$ score < file1

2.輸出重定向符

• 一般形式是:命令 > 檔名
如:$ who > abc

3.輸出附加定向符

• 一般形式是:命令>>檔名
如:$ ps -l >> psfile
• 輸入和輸出重新定向可以連在一起使用。例如:
$ wc -l < infile > outfile

4.即時檔案定向符

• 即時檔案的形式是:
命令 [引數]<< 標記符
輸入行

標記符
注意:標記符要成對出現
• 例如:
mail $1 << !!
Best wishes to you on your birthday .
!!

5.與檔案描述字有關的重定向

• 系統為每個程序自動開啟三個標準檔案(即標準輸入、標準輸出和錯誤輸出),其檔案描述字分別為0,1和2。
• 標準錯誤輸出也可重定向到一個檔案中,其一般形式是:
命令 2> 檔名
命令 2>> 檔名
• 標準輸出和標準錯誤輸出可以重定向到同一個檔案,一般形式是:
command $>file
• 等價於下面形式的命令:
command > file 2>& 1

註釋、管道線、後臺命令
1.註釋 #開頭

#!/bin/bash
# If no arguments, then listing the current directory.
# Otherwise, listing each subdirectory.

2.管道線 前一個命令的輸出正是下一個命令的輸入

ls -l $HOME | wc –l
ls | grep m?.c | wc –l

3.後臺命令 在一條命令的最後輸入&,在後臺執行

$ gcc m1.c&

命令執行操作符
1.順序執行
在執行時,以分號隔開的各條命令從左到右依次執行 

• pwd ; who | wc -l ; cd /usr/bin

2.邏輯與

• 命令1 && 命令2
• 其功能是,先執行命令1,如果執行成功,才執行命令2;否則,若命令1執行不成功,則不執行命令2。

3.邏輯或

• 命令1 || 命令2
• 其功能是,先執行命令1,如果執行不成功,則執行命令2;否則,若命令1執行成功,則不執行命令2。

成組命令

1.{ }形式
• 以花括號括起來的全部命令可視為語法上的一條命令,出現在管道符的一邊。
$ { echo “User Report for date . ”; who ; } | pr
使用花括號時在格式上應注意:左括號 “{ ”後面應有一個空格;右括號“}”之前應有一個分號( ;)
2.( )形式
(echo "Current directory is pwd . "
cd /home/mengqc ; ls -l ;
cp m1 em1 && rm m1
cat em1) | pr
二者存在重要區別:用花括號括起來的成組命令只是在本shell內執行命令表,不產生新的程序;而用圓括號括起來的成組命令是在新的子shell內執行,要建立新的子程序。

使用者定義的變數

1.變數名是以字母或下線符打頭的字母、數字和下線符序列,並且大小寫字母意義不同。

  1. 定義變數並賦值的一般形式是:
    變數名=字串
    3.引用變數值 在變數名前面加上一個符號“$”
    • 如果在賦給變數的值中要含有空格、製表符或換行符,那麼,就應該用雙引號把這個字串括起來。
    $ names="Zhangsan Lisi Wangwu"
    $ echo $names
命令替換

• 有兩種形式的命令替換:一種是使用倒引號引用命令,其一般形式是:
命令表
• 另一種形式是:
$(命令表)
如:$ dir=$(pwd)
$ echo $(pwd ; cd /home/mengqc ; ls -d)

輸入、輸出命令

1.read命令
• 可以利用read命令從鍵盤上讀取資料,然後賦給指定的變數。read命令的一般格式是:
• read 變數1 [ 變數2 …]
– 變數個數與給定資料個數相同,則依次對應賦值
– 變數個數少於資料個數,則從左至右對應賦值,但最後一個變數被賦予剩餘的所有資料。
– 變數個數多於給定資料個數,則依次對應賦值,而沒有資料與之對應的變數取空串
2. echo命令顯示其後的變數值或者直接顯示它後面的字串
如果echo命令帶有選項“-e”,那麼在其後的引數中可以有以下轉義字元:
\a \b \c \e \f \n \r \t \v \ \m \xm

移動位置引數

• 每執行一次shift命令,就把命令列上的實參向左移一位,即相當於位置引數向右移動一個位置。
• shift命令不能將$0移走,所以經shift右移位置引數後, $0的值不會發生變化。
• shift命令可以帶有一個整數作為引數

預先定義的特殊變數

$# 命令列上引數的個數,但不包含shell指令碼名本身。因 此,$#可以給出實際引數的個數。
$? 上一條命令執行後的返回值(也稱作 “返回碼”、 “退出狀態”、“退出碼”等)。它是一個十進位制數。
$$ 當前程序的程序號。
$! 上一個後臺命令對應的程序號,這是一個由1~5位數字構成的數字串。
$- 由當前shell設定的執行標誌名組成的字串。
$* 表示在命令列中實際給出的所有實參字串,它並不僅限於9個實參。
$ @ 它與$基本功能相同,即表示在命令列中給出的所有實參。但“[email protected]”與“$”不同。