shell常用命令

shell中字符串

- 字符串可以用單引號,也可以用雙引號,也可以不用引號
- 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的
- 單引號字串中不能出現單引號(對單引號使用轉義符后也不行)
- 雙引號里可以有變量
- 雙引號里可以出現轉義字符

建立軟硬鏈接

ln [參數] [源文件] [目標文件]

軟鏈接:
1.軟鏈接,以路徑的形式存在。類似于Windows操作系統中的快捷方式
2.軟鏈接可以 跨文件系統 ,硬鏈接不可以
3.軟鏈接可以對一個不存在的文件名進行鏈接
4.軟鏈接可以對目錄進行鏈接

硬鏈接:
1.硬鏈接,以文件副本的形式存在。但不占用實際空間。
2.不允許給目錄創建硬鏈接
3.硬鏈接只有在同一個文件系統中才能創建

# 給文件創建軟鏈接,為log2013.log文件創建軟鏈接link2013,如果log2013.log丟失,link2013將失效:
ln -s log2013.log link2013

# 文件創建硬鏈接,為log2013.log創建硬鏈接ln2013,log2013.log與ln2013的各項屬性相同
ln log2013.log ln2013

echo

# 用于字符串的輸出
echo string

echo "It is a test" 或者
echo It is a test

# 顯示變量
#!/bin/sh
read name 
echo "$name It is a test"

# 顯示換行
echo -e "OK! \n" # -e 開啟轉義
echo "It is a test"

#!/bin/sh
echo -e "OK! \c" # -e 開啟轉義 \c 不換行
echo "It is a test"

# 顯示結果定向至文件,會覆蓋原有文件內容
echo "It is a test" > myfile

# 內容追加到文件末尾  換行追加
echo "It is a test" >> myfile

# 顯示命令執行結果
echo `date`

tail

tail [參數] [文件]  
-f 循環讀取
-q 不顯示處理信息
-v 顯示詳細的處理信息
-c<數目> 顯示的字節數
-n<行數> 顯示文件的尾部 n 行內容
--pid=PID 與-f合用,表示在進程ID,PID死掉之后結束
-q, --quiet, --silent 從不輸出給出文件名的首部
-s, --sleep-interval=S 與-f合用,表示在每次反復的間隔休眠S秒

# 默認顯示最后 10 行
tail notes.log         

# 跟蹤名為 notes.log 的文件的增長情況
tail -f notes.log

# 顯示文件 notes.log 的內容,從第 20 行至文件末尾:
tail -n +20 notes.log

less

less aa.log
-N  顯示每行的行號 + 回車

# 可以使用ctrl組合,也可以直接使用U D B F
ctrl + U - 向后移動半屏
ctrl + D - 向前移動半屏
ctrl + B - 向后移動一屏
ctrl + F - 向前移動一屏
Z 向下移動一屏

G - 移動到最后一行
g - 移動到第一行

less aa.log后輸入 
/xxx:向下搜索“xxx”的功能
?xxx:向上搜索“xxx”的功能

# 搜索多個條件
/xxx|xxx

# 進入less后跳轉到哪行
:行號g

n 向前顯示搜索結果
Shift+n 向后復看搜索結果

# 指定顯示到哪行
less -N +555 aa.log

# 查找aa.log中xxx內容 -n 顯示行號 -i忽略大小寫
grep -in xxx aa.log

less 在屏幕底部顯示一個冒號(:),等待用戶輸入命令

退出less
ctrl+Z

read

腳本執行賦值的時候,等號左右不要有空格
read -t 5 -p "輸入對應的標號:" num 

-s:隱藏輸入的內容
-t:給出等待的時間,超時會退出read 秒
-p:給出提示符。默認不支持"\n"換行
num 用于接收輸入的內容
輸出輸入的內容$num ${num}

read -t 5 -p '請輸入:' num
echo $num
echo '\n'
echo ${num}

awk

對數據進行列的提取,是?本處理?具,默認按照空格切分

sort命令?于將?本?件內容加以排序,-n 按照數值排,-
r 按照倒序來排
案例的sort -n 是按照第?列的數值??進?排序,從
?到?,倒序就是 sort -rn

uniq 去除重復出現的?列, -c 在每列旁邊顯示該?重復
出現的次數。

語法: awk '條件1 {執行動作} 條件2 {執行動作} ...' 文件名

# printf輸出內容后不換行,print是換行
# awk 默認按照空格切分  $1輸出第1列
awk '{printf $1}' aa.sh
awk '{print $1}' aa.sh

$1 #代表第一列 
$2 #代表第二列 
$0 #代表一整行
-F #指定分割符

# df 用于查詢磁盤使用率
df -h | grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}'

echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'

# BEGIN 在讀取所有行內容前就開始執行,常常被用于修改內置變量的值 
# FS 在BEGIN時用于定義分割符 
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' 

# END 結束的時候執行 
# NR 行號 
df -h | awk 'NR==2 {print $5}' awk '(NR>=20 && NR<=30) {print $1}' /etc/passwd

grep

grep 對數據進行 行 的提取
語法:grep [選項]...[內容]...[file] 
    [選項] 可以不寫,默認是查找匹配內容
    -v  #對內容進行取反提取 除了查找內容的以外內容
    
# -n 顯示行號 123為要搜索的內容 aa.sh是從文件搜索
grep -n '123' 'aa.sh'

# 也可以 |為管道符  cat出的內容輸送給grep
cat 'aa.sh' | grep -n '123'

cut

cut 對列數據提取
語法:cut [選項]...[file]
    -d  #指定分割符
    -f  #指定截取區域
    -c  #以字符為單位進行分割
    
# 查找aa.sh文件中有bin字符的行輸出。cut對列提取
# -d對輸出的行以':'分隔,然后取出-f 1 第一列
grep 'bin' 'aa.sh' | cut -d':' -f1

cat

用于連接文件并打印到標準輸出設備上

# cat和echo使用 > 和 >>區別
>: 是覆蓋原有文件內容
>>: 追加到原有文件末尾 會換行追加

# textfile1 的文檔內容--加上行號后--輸入 textfile2 這個文檔里
cat -n textfile1 > textfile2

# textfile1 和 textfile2 的文檔內容--加上行號(空白行不加)之后--將內容附加到 textfile3 文檔里
cat -b textfile1 textfile2 >> textfile3

# 清空 /etc/test.txt 文檔內容
cat /dev/null > /etc/test.txt

sed

sed的應用場景:主要對數據進行處理(選取,新增,替換,刪除,搜索)

-n #把匹配到的行輸出打印到屏幕 
p #以行為單位進行查詢,通常與-n一起使用 
df -h | sed -n '2p' 

d #刪除 
sed '2d' df.txt 

a #在行的下面插入新的內容 
sed '2a 1234567890' df.txt 

i #在行的上面插入新的內容 
sed '2i 1234567890' df.txt 

c #替換 
sed '2c 1234567890' df.txt 

s/要被取代的內容/ 新的字符串/g #指定內容進行替換 sed 's/0%/100%/g' df.txt

搜索:在文件中搜索內容 
cat -n df.txt | sed -n '/100%/p' 

-e #表示可以執行多條動作 
cat -n df.txt | sed -n -e 's/100%/100%---- -100%/g' -e '/100%-----100%/p'

# -n是顯示行 搜索k的行顯示
sed -n '/k/p' aa.sh

# 打印8到24行
sed -n '8,24p' aa.sh
sed -n '8,24p' aa.sh | grep 'k'

shell語法

-e 目標是否存在(exist)
-d 是否為路徑(directory)
-f 是否為文件(file)
# 判斷當前目錄下是否有foer.sh這個文件,假如沒有就創建出foer.sh 文件
[ -e foer.sh ] || touch foer.sh 文件

-r 是否有讀取權限(read) 
-w 是否有寫入權限(write) 
-x 是否有執行權限(excute) 
[ -x 123.txt ] && echo '有執行權限'

-eq 等于(equal) 
-ne 不等于(not equal) 
-gt 大于(greater than) 
-lt 小于(lesser than) 
-ge 大于或者等于(greater or equal) 
-le 小于或者等于(lesser or equal)

# if判斷,[]內部判斷要有空格
if [ $num == 5 ];then
    echo 'xx'
elif [ $num == 6 ];then
    echo 'xx'
fi

-o 是或者的意思
-a 是而且的意思
-not 是相反的意思 
if [ $num == 6 -o $num == 8 ];then
    echo 'xx'
fi

while [ 條件判斷式 ] 
do 
    執行動作 
done

# for循環
for i in 1 2 3 4 5
do
echo "$i"
sleep 1
done

# `cat xxx` ``這里可以放置其他shell命令
# 默認以空格切分 循環輸出內容
for i in `cat /home/ljw/jb.sh`
do
# 雙引號里可以有變量,單引號不行
echo "$i"
sleep 1
done


# 查找系統/目錄下的文件
find / -ctime +10 -a -type f -name "*.log"
-ctime +10:十天以前的
-type f:是文件類型
-name:指定名字

腳本樣例

# $? 判斷上個命令執行狀態返回0=ok 1=fail
# $aa 或者 ${aa} 都是獲取變量aa的值
例如:{}處理連接符的問題,aa=22  則${aa}book 輸出是22book  如果使用$aabook  則會把aabook當做變量

# cat 用于查看小文件的命令

[root@MiWiFi-R2D-srv ljw]# ./gg.sh 44 66 kkk ss
第0個參數:./gg.sh
第1個參數:44
第2個參數:66
輸入的所有參數是什么:4
總共輸入了多少個參數:44 66 kkk ss

注意:
$0 獲取當前執行文件的文件名
$1 獲取輸入的第一個元素44
$2 獲取輸入的第一個元素66
$# 獲取一共輸入的參數
$* 等到輸入參數的個數

# gg.sh文件
echo "第0個參數:$0"
echo "第1個參數:$1"
echo "第2個參數:$2"
echo "輸入的所有參數是什么:$#"
echo "總共輸入了多少個參數:$*"

常見的幾個符號

# 追加內容echo用于少量輸入,,cat用于多內容輸入
# >會覆蓋原有的內容
cat >gg.txt 
回車然后輸入內容 control z可以退出

# >>不會覆蓋原有的內容
例如:echo aa >> bb.txt 
把aa追加到bb.txt文件的末尾
    
# ; 用于執行多條命令
cat bb.txt ; ls  
當前目錄下先執行cat命令,然后再執行ls命令

# | 管道符
cat bb.txt | grep bb 
符號|就是從cat命令輸出的內容里面,繼續執行grep的結果  grep查詢內容

# && 前面的命令執行成功,后面的才可以執行
cat ssdd.txt && ls

# || 前面的命令執行失敗,后面的才可以執行

num = 6
# 雙引號里面會輸出變量值
"" 會輸出變量值 "$num" = 6

# 單引號會直接字符串輸出
'' 輸出本身 '$num' = $num

# `` 反撇號輸出命令結果 
a=`date`
# $a就是日期
echo $a  
       
# 輸入的內容賦給 pass
echo "輸入你的賬號:"
read pass 
echo "這是我的輸入;$pass"

# 字符上色
# ``反撇號用于里面內容是命令,需要正常執行
read -p "`echo -e "\033[31m 請輸入賬號: \033[0m"`"

echo -e "\033[31m 紅色字 \033[0m"

查看訪問最頻繁的前100個IP

# 內容都是以空格分隔,'{print $1}' 輸出列的第一列$1
awk '{print $1}' access_temp.log | sort -n | uniq -c | sort -rn | head -n 5

統計訪問最多的url 前20名

cat access_temp.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | more

統計耗時接?, 列出傳輸時間超過 2 秒的接?,顯示前5條

cat time_temp.log | awk '($NF > 2){print $7}'|sort -n|uniq -c|sort -nr|head -5
備注:$NF 表示最后?列, awk '{print $NF}'

腳本執行賦值的時候,等號左右不要有空格

sh文件執行方法:

方法1: ./shell.sh
方法2: sh shell.sh 或者bash shell.sh 
方法3: source shell.sh

# 沒有權限時
添加執行權限 chmod +x shell.sh
不同于其它語言需要先聲明變量 
shell的變量直接使用,
eg: a=15 
調用變量的話 $a 或者 a 或者 ${a}

$? #判斷上一條命令執行的是否成功 
$0 #返回腳本的文件名稱
$1-$9 #返回對應的參數值
$* #返回所有的參數值是什么
$# #返回參數的個數和

>會覆蓋原有的內容
>>不會覆蓋原有的內容(追加)
; #執行多條命令
| #管道符
&& #前面的命令執行成功,后面的才可以執行 
|| #前面的命令執行失敗,后面的才可以執行 

"" #會輸出變量值
'' #輸出本身
`` #輸出命令結果 
eg:a=`date`; echo $a

# and 
if [ c1 -a c2 ]; then
…
fi
# and 
if [ c1 ] && [ c2 ]; then
…
fi

# or
if [ c1 -o c2 ]; then
…
fi
# or
if [ c1 ] || [  c2 ]; then
…
fi



語法:[ 判斷表達式 ]
文件(夾)或者路徑:
-e 目標是否存在(exist)
-d 是否為路徑(directory)
-f 是否為文件(file)

#判斷當前目錄下是否有foer.sh這個文件,假如沒有就創建出foer.sh
[ -e foer.sh ] || touch foer.sh

權限:
-r 是否有讀取權限(read) 
-w 是否有寫入權限(write) 
-x 是否有執行權限(excute)

[ -x 123.txt ] && echo '有執行權限'


整數值(int型):
-eq 等于(equal)
-ne 不等于(not equal)
-gt 大于(greater than)
-lt 小于(lesser than)
-ge 大于或者等于(greater or equal) -le 小于或者等于(lesser or equal)

[ 9 -gt 8 ] && echo '大于'


小數(浮點型):
[ `echo '1.2 < 1.3' | bc` -eq 1 ] && echo '小于'


字符串:
= 相等
!= 不相等

[ 'kkkkk' != 'kkkk' ] && echo '不等于'

&&: 前面內容ok,后面才會執行
||: 前面內容no ok,后面才會執行


bc計算器
保留多少位小數可以通過scale 但是scale只對除法,取余數,乘冪 有效,對加減沒有效

#計算出0.2+0.3的和并保留倆位小數,此時bc計算器會省略掉個位數的0
echo "scale=2;(0.2+0.3)/1" | bc

#計算出1.2+1.3的和并保留倆位小數
echo "scale=2;(1.2+1.3)/1" | bc

name=kk
echo ${#name}

lsof -i:9900
$?
如果lsof查出來有內容,$?:0 否則是1
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容

  • 生成連續的自然數 seq 1 20 #輸出是1,2……20,分隔符是換行符seq -s "," 1 20 #輸出是...
    wo_monic閱讀 514評論 0 7
  • 內建命令 所謂內建命令,就是bash自身提供的命令,不是外部可執行程序文件,可以用type來確定一個命令是否內建命...
    張國立_0695閱讀 328評論 0 0
  • linux是大數據開發入門必備掌握知識,今天給大家介紹下linuxcentos7一些常用的命令 點擊鏈接,從零開...
    呆子_23c9閱讀 286評論 0 0
  • 八重櫻:怎么從一名碼農成為架構師的必看知識點:目錄大全(不定期更新) 下面為大家總結Linux shell的常用命...
    八重櫻勿忘閱讀 276評論 0 1
  • 最近無聊,整理了一些Unix Shell常用命令,借鑒了一些其他文章內容。內容如下 結束語 到這里就結束了,如若不...
    SwordDevil閱讀 579評論 0 0