Shell 基本命令
阿新 • • 發佈:2019-01-28
Shell基本命令
clear 清屏
cd – 後退
cd $MYPATH 進入指定目錄(環境變數已設)
ls –l 列出檔案
ls –al 列出所有檔案,包含隱藏檔案
whoami 檢視自己使用者名稱
cd mydir 進入目錄
cd my* 進入目錄
tar cvf ddd.tar abc.* def ghi 壓縮檔案(可以多個)
tar xvf ddd.tar 解壓縮
rm –rf mydir 刪除目錄,不帶確認
grep abc *.pc 檔案內容中查詢abc
grep –c abc *.txt 查詢內容abc,並統計
grep –i abc *.txt 查詢內容abc,大小寫不敏感
set|grep TL_ABC 在環境變數中過濾TL_ABC
diff abc.txt /usera/def.txt 比較檔案
find . –name “abc*” 目錄中查詢檔案
cp –p abc.txt /mydir/abc_d.txt 拷貝
ps –ef|grep UserA 列出某使用者的程序
shellABC.sh > abc.log 覆蓋輸出
shellABC.sh >> abc.log 追加輸出
exit 退出
su –userABC 切換使用者
last 檢視最近登入的使用者
Esc+K 重複上次輸入的命令(多次k向上翻)
編輯上次的命令: Esc+i 插入 Esc+x 刪除 h 向左 l 向右
ipcs –oq|grep 5000 檢視訊息佇列
make 自動查詢目錄下的makefile並編譯
man sighold 檢視該函式定義 man socket
cat abc.txt 檢視檔案
more abc.txt 分頁檢視檔案
vi abc.txt 編輯檔案
netstat –i 檢視網絡卡
netstat –r 檢視路由
alias pss=’ps –ef|grep abc’ 設定快捷shell名pss,常用在.profile中
which pss ,或which cc 查cc所在的目錄
PS1=’$PWD>’;export PS1 顯示當前目錄,而不是$ (常用在.profile中)
set –o vi 常用在Esc顯示^K的情況下
cp /dev/null abc.log 清空檔案 (大檔案常常vi打不開(:%d),直接用此命令)
. .profile 修改$HOME的.profile檔案後不用重新登陸,用此命令立刻生效
set|grep ABC, 檢視環境變數,或用env
who|wc –l 統計線上人數
pwd 檢視當前目錄
ipcs –oq 檢視訊息佇列是否擁堵
tail –f abc.log 跟蹤檔案末尾
chmod +x find_me.sh 加執行許可權
netstat –an|grep 52 檢視包含52的埠網路狀態
netstat –an|grep LISTEN 檢視偵聽埠網路狀態
ls –l|grep ‘^d’ 列出目錄
ls –l|grep ‘^[^d]’ 列出非目錄
grep userABC /etc/services 檢視DB2埠等資訊
grep userABC /etc/passwd 檢視$HOME所在目錄
dbx –a 99878 除錯attach到PID(有關dbx除錯命令見其他)
指令碼例子:(列印環境變數)
env>env.log
while read line
do
var=’echo $line|awk –F=’{print $1}’’
value=’echo $line|awk –F=’{print $2}’’
echo $var “------”$value
done
rm –f env.log
指令碼例子:(停止程序, 帶一個引數,用法ShellName.sh DEF)
for i in ‘ps –ef|grep ABC|grep $1|awk ‘{print $2}’’
do
echo “delete PID $i”
kill -9 $i
done
Vi命令
:wq儲存退出 :q! 強制退出
Kjhl 上下左右
i 進入插入模式, r 進入替代模式
A 到行尾並Append,
a 進入Append輸入模式
O 在本行上新增一行
o在本行下新增一行
:%d 刪除所有文字
:sh 執行外部shell
:389 跳到389行, :1 跳至檔案頭 shift+g,跳至頁尾
:set nu 列印行號
Ctrl+f 向下翻頁, Ctrl+b 向上翻頁
^ 移動至行首 $ 移動至行末
/ 向下查詢,? 向上查詢 (繼續按則查詢下一個)
// 重複上次查詢
Esc 退出編輯或插入模式
X 刪除後一個,x 刪除前一個
:1,%s/abc/def/g 替換abc為def
:1,$s/^M//g (轉換控制字元^M, 用Ctrl+V, Ctrl+M輸入)
dd刪除一行
J 刪除一行帶回車
Yy 複製一行, p貼上
Shell與Sed常用用法
-----------------------------------------------------------------------------
檔案abc:
TL_FMT_CHG_SHM_KEY=7100;export TL_FMT_CHG_SHM_KEY
TL_MSQ_SHM_KEY=7200;export TL_MSQ_SHM_KEY
TL_TXN_SRV_SHM_KEY=7300;export TL_TXN_SRV_SHM_KEY
需要取出等號前面的:awk -F= '{print $1}' abc
需要取出TL_FMT_CHG_SHM_KEY等號後面的7100這個值:(原理是取出等號和分號之間的資料)
awk -F\; '{print $1}' abc|grep TL_FMT_CHG_SHM_KEY|awk -F= '{print $2}'
------------------------------------------------------------
$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1
a=5; ((a++)) 可將 $a 重定義為 6
a=5; ((a--)) 則為 a=4
a=5; b=7; ((a 會得到 0 (true) 的返回值。
常見的用於 (( )) 的測試符號有如下這些:
:小於
>:大於
:小於或等於
>=:大於或等於
==:等於
!=:不等於
2.()的用法
命令替代
語法:
$(command)
例子:
$pwd
/home/user2
$ curdir=$(pwd)
$ echo $curdir
/home/user2
$ cd /tmp
$ pwd
$ cd $curdir
$ pwd
/home/user2
以下的賦值語句:
$ curdir=$(pwd) 或 $ curdir=`pwd`
pwd 的輸出被賦給變數 curdir。
使用- n引數顯示實際在哪一行:
程式碼:
[[email protected] sam]$ grep -n '^$' myfile
if [ "`/usr/ucb/whoami`" != "root" ]; then
echo "You must be root to run this script!"
exit 1
fi
if [ "${msg}" = "" ] ;then
echo "msg is null"
fi
shell Awk & Sed 正則表示式 強文:
___________________________________
1 >>inputfile
2 i=`cat inputfile|sed ...`
3 if [ $i =2 ]
then
...
fi
4 rm -f inputfile
___________________________________
\ 遮蔽特殊字元
^ 匹配開始位置。
$ 匹配結束位置。
* 匹配前面的子表示式零次或多次。
. 匹配一個位置(例如.$表示最後一個字元)
+ 匹配前面的子表示式一次或多次。
? 匹配前面的子表示式零次或一次。
{n} n是一個非負整數。匹配確定的 n 次。
{n,} n是一個非負整數。至少匹配n 次。
{n,m} m和n均為非負整數,其中n 。最少匹配 n 次且最多匹配 m 次。
[xyz] 匹配所包含的任意一個字元。
[^xyz] 匹配未包含的任意字元。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 匹配指定範圍內的任意字元。例如,'[a-z]' 可以匹配 'a' 到 'z' 範圍內的任意小寫字母字元。
[^a-z] 匹配任何不在指定範圍內的任意字元。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 範圍內的任意字元。
[^$] 對空行
[^.*$] 對匹配行中任意字串
^......$ 對包括6個字元的行
^.$ 對僅有一個字元的行
^\.[0-9][0-9] 對以一個句點和兩個數字開始的行
[a-zA-Z] 對任意單字元
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 對日期格式dd-mm-yyyy
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}對IP地址格式nnn.nnn.nnn.nnn
\d 匹配一個數字字元。等價於 [0-9]。
\D 匹配一個非數字字元。等價於 [^0-9]。
\f 匹配一個換頁符。等價於 \x0c 和 \cL。
\n 匹配一個換行符。等價於 \x0a 和 \cJ。
\r 匹配一個回車符。等價於 \x0d 和 \cM。
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
\t 匹配一個製表符。等價於 \x09 和 \cI。
\v 匹配一個垂直製表符。等價於 \x0b 和 \cK。
\w 匹配包括下劃線的任何單詞字元。等價於'[A-Za-z0-9_]'。
\W 匹配任何非單詞字元。等價於 '[^A-Za-z0-9_]'。
Example:列出檔案的1-4行;
$cat ifile|sed -n '1,4p' # method 1
$sed -n '1,4p' ifile # method 2
$sed '8,12!d' ifile # method 3
$cat ifile|sed -n '1,4p;40p;45,50p' (列出檔案的1-4行,40,45-50行;)
Example:列出包含sf56的行;
$cat ifile|sed -n '/sf56/p'
Example:列出包含sf|56的行(|不是轉義字元);
$cat ifile|sed -n '/sf56/p'
Example:列出以 1. 開頭的行(.為轉義字元);
$cat inputfile|sed -n '/^1\./p'
Example:列出以 1. 開頭的行(.為轉義字元),且刪除該行的最後一個字元;
$cat ifile|sed -n '/^1\./p'|sed 's/.$//'
Example:列出刪除1-3行後的所有行;
$cat ifile|sed '1,3d'
Example:列出刪除第一行的檔案;
$cat ifile|sed '$d'
Example:列出刪除最後兩行的檔案;
$cat ifile|sed 'N;$!P;$!D;$d'
Example:列出刪除最後10行的檔案;
$cat ifile|sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
$cat ifile|sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
Example:列出刪除第3行到最後一行的檔案;
$cat ifile|sed '3,$d'
Example:刪除每行開頭的空格或tab符號;
$cat inputfile|sed 's/^[ \t]*//' # see note on '\t' at end of file
Example:刪除每行末尾的空格或tab符號;
$cat inputfile|sed 's/[ \t]*$//' # see note on '\t' at end of file
Example:刪除每行開頭和末尾的空格或tab符號;
$cat inputfile|sed 's/^[ \t]*//;s/[ \t]*$//'
Example:檔案中有一行是MYPARAM=123,取得123這個引數值;
$cat ifile|sed '/^MYPARAM= */!d; s///;q'
Example:全域性替換sf56為5566;
$cat ifile|sed 's/sf56/5566/g'
Example:列出以4結尾的行;
$cat inputfile|sed -n '/4$/p'
Example:列出以 1-9. 開頭的行;
$cat inputfile|sed -n '/^[1-9]\./p'
Example:列出最後一行;
(print the last line of a file (emul
clear 清屏
cd – 後退
cd $MYPATH 進入指定目錄(環境變數已設)
ls –l 列出檔案
ls –al 列出所有檔案,包含隱藏檔案
whoami 檢視自己使用者名稱
cd mydir 進入目錄
cd my* 進入目錄
tar cvf ddd.tar abc.* def ghi 壓縮檔案(可以多個)
tar xvf ddd.tar 解壓縮
rm –rf mydir 刪除目錄,不帶確認
grep abc *.pc 檔案內容中查詢abc
grep –c abc *.txt 查詢內容abc,並統計
grep –i abc *.txt 查詢內容abc,大小寫不敏感
set|grep TL_ABC 在環境變數中過濾TL_ABC
diff abc.txt /usera/def.txt 比較檔案
find . –name “abc*” 目錄中查詢檔案
cp –p abc.txt /mydir/abc_d.txt 拷貝
ps –ef|grep UserA 列出某使用者的程序
shellABC.sh > abc.log 覆蓋輸出
shellABC.sh >> abc.log 追加輸出
exit 退出
su –userABC 切換使用者
last 檢視最近登入的使用者
Esc+K 重複上次輸入的命令(多次k向上翻)
編輯上次的命令: Esc+i 插入 Esc+x 刪除 h 向左 l 向右
ipcs –oq|grep 5000 檢視訊息佇列
make 自動查詢目錄下的makefile並編譯
man sighold 檢視該函式定義 man socket
cat abc.txt 檢視檔案
more abc.txt 分頁檢視檔案
vi abc.txt 編輯檔案
netstat –i 檢視網絡卡
netstat –r 檢視路由
alias pss=’ps –ef|grep abc’ 設定快捷shell名pss,常用在.profile中
which pss ,或which cc 查cc所在的目錄
PS1=’$PWD>’;export PS1 顯示當前目錄,而不是$ (常用在.profile中)
set –o vi 常用在Esc顯示^K的情況下
cp /dev/null abc.log 清空檔案 (大檔案常常vi打不開(:%d),直接用此命令)
. .profile 修改$HOME的.profile檔案後不用重新登陸,用此命令立刻生效
set|grep ABC, 檢視環境變數,或用env
who|wc –l 統計線上人數
pwd 檢視當前目錄
ipcs –oq 檢視訊息佇列是否擁堵
tail –f abc.log 跟蹤檔案末尾
chmod +x find_me.sh 加執行許可權
netstat –an|grep 52 檢視包含52的埠網路狀態
netstat –an|grep LISTEN 檢視偵聽埠網路狀態
ls –l|grep ‘^d’ 列出目錄
ls –l|grep ‘^[^d]’ 列出非目錄
grep userABC /etc/services 檢視DB2埠等資訊
grep userABC /etc/passwd 檢視$HOME所在目錄
dbx –a 99878 除錯attach到PID(有關dbx除錯命令見其他)
指令碼例子:(列印環境變數)
env>env.log
while read line
do
var=’echo $line|awk –F=’{print $1}’’
value=’echo $line|awk –F=’{print $2}’’
echo $var “------”$value
done
rm –f env.log
指令碼例子:(停止程序, 帶一個引數,用法ShellName.sh DEF)
for i in ‘ps –ef|grep ABC|grep $1|awk ‘{print $2}’’
do
echo “delete PID $i”
kill -9 $i
done
Vi命令
:wq儲存退出 :q! 強制退出
Kjhl 上下左右
i 進入插入模式, r 進入替代模式
A 到行尾並Append,
a 進入Append輸入模式
O 在本行上新增一行
o在本行下新增一行
:%d 刪除所有文字
:sh 執行外部shell
:389 跳到389行, :1 跳至檔案頭 shift+g,跳至頁尾
:set nu 列印行號
Ctrl+f 向下翻頁, Ctrl+b 向上翻頁
^ 移動至行首 $ 移動至行末
/ 向下查詢,? 向上查詢 (繼續按則查詢下一個)
// 重複上次查詢
Esc 退出編輯或插入模式
X 刪除後一個,x 刪除前一個
:1,%s/abc/def/g 替換abc為def
:1,$s/^M//g (轉換控制字元^M, 用Ctrl+V, Ctrl+M輸入)
dd刪除一行
J 刪除一行帶回車
Yy 複製一行, p貼上
Shell與Sed常用用法
-----------------------------------------------------------------------------
檔案abc:
TL_FMT_CHG_SHM_KEY=7100;export TL_FMT_CHG_SHM_KEY
TL_MSQ_SHM_KEY=7200;export TL_MSQ_SHM_KEY
TL_TXN_SRV_SHM_KEY=7300;export TL_TXN_SRV_SHM_KEY
需要取出等號前面的:awk -F= '{print $1}' abc
需要取出TL_FMT_CHG_SHM_KEY等號後面的7100這個值:(原理是取出等號和分號之間的資料)
awk -F\; '{print $1}' abc|grep TL_FMT_CHG_SHM_KEY|awk -F= '{print $2}'
------------------------------------------------------------
$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1
a=5; ((a++)) 可將 $a 重定義為 6
a=5; ((a--)) 則為 a=4
a=5; b=7; ((a 會得到 0 (true) 的返回值。
常見的用於 (( )) 的測試符號有如下這些:
:小於
>:大於
:小於或等於
>=:大於或等於
==:等於
!=:不等於
2.()的用法
命令替代
語法:
$(command)
例子:
$pwd
/home/user2
$ curdir=$(pwd)
$ echo $curdir
/home/user2
$ cd /tmp
$ pwd
$ cd $curdir
$ pwd
/home/user2
以下的賦值語句:
$ curdir=$(pwd) 或 $ curdir=`pwd`
pwd 的輸出被賦給變數 curdir。
使用- n引數顯示實際在哪一行:
程式碼:
[[email protected] sam]$ grep -n '^$' myfile
if [ "`/usr/ucb/whoami`" != "root" ]; then
echo "You must be root to run this script!"
exit 1
fi
if [ "${msg}" = "" ] ;then
echo "msg is null"
fi
shell Awk & Sed 正則表示式 強文:
___________________________________
1 >>inputfile
2 i=`cat inputfile|sed ...`
3 if [ $i =2 ]
then
...
fi
4 rm -f inputfile
___________________________________
\ 遮蔽特殊字元
^ 匹配開始位置。
$ 匹配結束位置。
* 匹配前面的子表示式零次或多次。
. 匹配一個位置(例如.$表示最後一個字元)
+ 匹配前面的子表示式一次或多次。
? 匹配前面的子表示式零次或一次。
{n} n是一個非負整數。匹配確定的 n 次。
{n,} n是一個非負整數。至少匹配n 次。
{n,m} m和n均為非負整數,其中n 。最少匹配 n 次且最多匹配 m 次。
[xyz] 匹配所包含的任意一個字元。
[^xyz] 匹配未包含的任意字元。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 匹配指定範圍內的任意字元。例如,'[a-z]' 可以匹配 'a' 到 'z' 範圍內的任意小寫字母字元。
[^a-z] 匹配任何不在指定範圍內的任意字元。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 範圍內的任意字元。
[^$] 對空行
[^.*$] 對匹配行中任意字串
^......$ 對包括6個字元的行
^.$ 對僅有一個字元的行
^\.[0-9][0-9] 對以一個句點和兩個數字開始的行
[a-zA-Z] 對任意單字元
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 對日期格式dd-mm-yyyy
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}對IP地址格式nnn.nnn.nnn.nnn
\d 匹配一個數字字元。等價於 [0-9]。
\D 匹配一個非數字字元。等價於 [^0-9]。
\f 匹配一個換頁符。等價於 \x0c 和 \cL。
\n 匹配一個換行符。等價於 \x0a 和 \cJ。
\r 匹配一個回車符。等價於 \x0d 和 \cM。
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
\t 匹配一個製表符。等價於 \x09 和 \cI。
\v 匹配一個垂直製表符。等價於 \x0b 和 \cK。
\w 匹配包括下劃線的任何單詞字元。等價於'[A-Za-z0-9_]'。
\W 匹配任何非單詞字元。等價於 '[^A-Za-z0-9_]'。
Example:列出檔案的1-4行;
$cat ifile|sed -n '1,4p' # method 1
$sed -n '1,4p' ifile # method 2
$sed '8,12!d' ifile # method 3
$cat ifile|sed -n '1,4p;40p;45,50p' (列出檔案的1-4行,40,45-50行;)
Example:列出包含sf56的行;
$cat ifile|sed -n '/sf56/p'
Example:列出包含sf|56的行(|不是轉義字元);
$cat ifile|sed -n '/sf56/p'
Example:列出以 1. 開頭的行(.為轉義字元);
$cat inputfile|sed -n '/^1\./p'
Example:列出以 1. 開頭的行(.為轉義字元),且刪除該行的最後一個字元;
$cat ifile|sed -n '/^1\./p'|sed 's/.$//'
Example:列出刪除1-3行後的所有行;
$cat ifile|sed '1,3d'
Example:列出刪除第一行的檔案;
$cat ifile|sed '$d'
Example:列出刪除最後兩行的檔案;
$cat ifile|sed 'N;$!P;$!D;$d'
Example:列出刪除最後10行的檔案;
$cat ifile|sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
$cat ifile|sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
Example:列出刪除第3行到最後一行的檔案;
$cat ifile|sed '3,$d'
Example:刪除每行開頭的空格或tab符號;
$cat inputfile|sed 's/^[ \t]*//' # see note on '\t' at end of file
Example:刪除每行末尾的空格或tab符號;
$cat inputfile|sed 's/[ \t]*$//' # see note on '\t' at end of file
Example:刪除每行開頭和末尾的空格或tab符號;
$cat inputfile|sed 's/^[ \t]*//;s/[ \t]*$//'
Example:檔案中有一行是MYPARAM=123,取得123這個引數值;
$cat ifile|sed '/^MYPARAM= */!d; s///;q'
Example:全域性替換sf56為5566;
$cat ifile|sed 's/sf56/5566/g'
Example:列出以4結尾的行;
$cat inputfile|sed -n '/4$/p'
Example:列出以 1-9. 開頭的行;
$cat inputfile|sed -n '/^[1-9]\./p'
Example:列出最後一行;
(print the last line of a file (emul