1. 程式人生 > >Shell 基本命令

Shell 基本命令

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 )) 

$ 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