常用shell命令歸納總結


一.首先,什么是shell

  shell翻譯成殼的意思,它是包裹在linux內核外層的,一個可通過一系列的linux命令對操作系統發出相關指令的人機界面。 shell可以通過其條件語句和循環語句等,把一系列linux命令結合在一起,形成一個相當於面向過程的程序,shell script,來實現一些較為復雜的功能。

      總括,shell是linux命令集的概稱,是屬於命令行的人機界面。Shell 是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設計語言。Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。Ken Thompson的sh是第一種Unix Shell,Windows Explorer是一個典型的圖形界面Shell。Shell 和Shell Script不是一回事,通常我們說的都是Shell Script。

      由定義可知, shell相當於經過裝飾的命令行,和命令行一樣,都能操作linux。但是shell是面向過程的,相當於有了一定的邏輯和過程,而命令行只是單一的操作。

二.常用命令

1. telnet

語法:telnet 主機名 或 telnet IP地址


telnet 130.129.21.250 

2.ll 文件或目錄處理:列出文件或目錄下的文件名。

語法: ls [-atFlgR] [name]

ls 列出目前目錄下的文件名。

ls -a 列出包括以 .開始的隱藏文件的所有文件名。

ls -t 依照文件最后修改時間的順序列出文件名。

ls -F 列出當前目錄下的文件名及其類型。以/ 結尾表示為目錄名,以* 結尾表示為可執行文件,以@ 結尾表示為符號連接。

ls -l 列出目錄下所有文件的權限、所有者、文件大小、修改時間及名稱。

ls -lg 同上,並顯示出文件的所有者工作組名。

ls -R 顯示出目錄下以及其所有子目錄的文件名。

3.cd  改變工作目錄

語法:cd [name]

name:目錄名、路徑或目錄縮寫。

cd - //返回到原來的目錄

4.cp: 復制文件

語法: cp [-r] 源地址 目的地址

cp -r dir1 dir2 復制整個目錄。

5.mv : 移動或更改文件、目錄名稱

語法:mv 源地址 目的地址

6.mkdir: 建立新目錄

語法: mkdir 目錄名

7.rm 和rmdir: 刪除目錄

語法: rmdir 目錄名 或 rm 目錄名

rmdir dir1 刪除目錄  dir1,但 dir1 下必須沒有文件存在,否則無法刪除。
rm -r dir1 刪除目錄  dir1及其子目錄下所有文件

8.rm: 刪除文件

rm file? 刪除文件名中有五個字符且前四個字符為file 的所有文件。

rm f* 刪除文件名中以 f 為字首的所有文件。

9.pwd: 列出當前所在的目錄位置

10.cat: 查看文件內容

cat file1 以連續顯示方式,查看文件名 file1 的內容。

11.more:分頁查看文件內容

語法: more 文件名 或 cat 文件名 | more

12.查看目錄所占磁盤容量

語法: du [-s] 目錄

du dir1 顯示目錄 dir1 的總容量及其子目錄的容量(以KB 為單位)。
du -s dir1 顯示目錄 dir1 的總容量(以KB 為單位)。
du -sh dir1 顯示目錄 dir1 的總容量(以M 為單位)。

13.文件權限的設定

        (1)改變文件或目錄的讀、寫、執行權限

語法:chmod [-R] mode name

name :文件名或目錄名

chmod -R 777 xml.go

 (2)改變文件或目錄的所有權

語法:chown [-R] 用戶名 name

chown vagrant  xml.go 

14. groups: 檢查自己所屬的工作組名稱

15. touch:改變文件或目錄的最后修改時間(沒啥意義)

語法:touch name

16.grep "關鍵字" 文件名: 查詢關鍵字在文件中的位置

grep string file

17.查找文件或命令的路徑

語法:whereis command 顯示命令的路徑。
語法:which command 顯示命令的路徑,及使用者所定義的別名。
語法:whatis command 顯示命令功能的摘要。

sudo find / -name xml.go //查找文件的路徑

18.比較文件或目錄的內容

語法:d i ff [-r] name1 name2
name1 name2:必須同時為文件名或目錄名。

diff file1 file2 比較文件file1 與 file2 內各行的不同之處。
diff -r dir1 dir2 比較目錄 dir1 與 dir2 內各文件的不同之處

19.進程控制

  (1)查看系統中的進程

語法:ps [-aux]
ps或ps -x 查看系統中,屬於自己的進程。
ps -au 查看系統中,所有用戶的進程。
ps -aux 查看系統中,包含系統內部的及所有用戶的進程。

(2)結束或終止進程

語法:kill [-9] PID

(3)在后台執行進程的方式(不常用)

語法:命令 &

(4)jobs: 查看正在后台中執行的進程

20.history: 查看命令記錄表的內容

 !!:  重復執行前一個命令

! n:  n代表記錄表的命令編號

! cat : 重復前面執行過的以 cat 為起始字符串的命令。

 顯示前一個命令的內容

語法: ! !:p

21.文件的壓縮

(1). 壓縮文件

語法:compress 文件名 壓縮文件

語法:compressdir 目錄名 壓縮目錄

(2). 解壓縮文件

語法:uncompress 文件名 解壓縮文件

語法:uncompressdir 目錄名 解壓縮目錄

22.| :管道命令的使用

語法:命令1 | 命令2  將命令1的執行結果送到命令2,做為命令2的輸入。

23.輸入/輸出控制

(1)標准輸入的控制

mail -s “mail test” 電子郵件地址 < file1 將文件file 當做信件的內容,主

題名稱為 mail test,送給收信人。

mail -s "mail test" xiaowangli@huashenggroups.com < xml.go

(2)標准輸出的控制

語法:命令 > 文件 將命令的執行結果送至指定的文件中。

ls -l > list 將執行 “ls -l” 命令的結果寫入文件list 中。

語法:命令>! 文件 將命令的執行結果送至指定的文件中,若文件已經存在,則覆蓋。

ll >list.txt
tail -30  xml.go>list2.txt

結果:list.txt內容

24.awk: 非常有用的一個文本處理命令,逐行運行,默認使用空格分割,-F 表示分割的樣式

25,shell 語法

if then else :   shell 文件

例子1:

#判斷文件是否存在

#!/bin/bash

if [ -f Af.php ];then
echo 'file exist'
else
echo 'file not exist'
fi

exit 0

執行shell文件

bash test.sh 

結果:

例子2:根據輸入判斷正負數

注意:[ ] 內兩邊要空一格.關鍵詞左右都要空一格

#!/bin/bash
#提示用戶輸入一個值
echo -n "請輸入一個數字:"

#保存用戶輸入的值到num中
read num

#[ ] 內兩邊要空一格
if [ "$num" -gt 0 ];then
echo '正數'
elif [ "$num" -lt 0 ];then
#elif [ "$num" -lt 0 ];then
echo '負數'
else
echo '零'
fi

exit 0

例子3:case 語句

#!/bin/bash

echo -n "你單身嗎? (y/n)"

read val

case $val in 
 Y|y)
echo "我們約會吧"
;;

N|n)
echo "不約,再見"
;;

*)
echo "輸入有誤"
;;

esac

exit 0

結果:

例子4:ls 列出當前目錄中文件列表

#!/bin/bash

#將結果存在CUL_DIR中
CUR_DIR=`ls`  #此處不是單引號,而是`` 撇號

#顯示ls 的結果
echo $CUR_DIR

for v in $CUR_DIR
do
if [ -f $v  ];then
echo "FILE: $v"
fi
done

exit 0

計算輸出 1-10 之間數字的總和

#!/bin/bash

sum=0
for ((i=0;i<10;i++))
do
((sum=$sum+$i))
done

echo "sum=$sum"

exit 0

例子5:使用 break 和 continue 控制循環
break 命令允許跳出循環

continue 命令類似於 break 命令,只有一點重要差別,它不會跳出循環,只是跳過這個循環步。:[break 應用] 從 0 開始逐步遞增,當數值等於 5 時跳出本次循環,等於10時停止遞增。

#!/bin/bash

#設置起開始值
val=0

while true
do
if [ "$val" -eq "5" ];then
#如果是val=5,則挑出循環
((val++))
continue;
elif [ "$val" -eq "10" ];then
break;
else
#輸出值
echo "val:$val"
#將數值加1
((val++))
fi
done

exit 0

結果:

數組:

例子6:

數組定義:

  1. array=(10 20 30 40 50)  一對括號表示是數組,數組元素用 “空格” 符號分割開。引用數組時從序號 0 開始。
  2. var="10 20 30 40 50"; array=($var)
  3. 除了上面的定義方式外,也可以單獨定義數組:
array[0]=10
array[1]=20
array[2]=30
array[3]=40
array[4]=50

數組操作:

#!/bin/bash
array=(10 20 30 40 50)

#顯示數組中所有元素
echo "數組列表:"
echo ${array[*]}
echo ${array[@]}

#顯示數組第2項
echo "顯示數組第二項"
echo ${array[1]}

#a顯示數組長度
echo "顯示數組長度:" ${#array[*]}
echo ${#array[@]}

#輸出數組的第1-3項
echo "數組的第1-3項:" ${array[@]:0:3}

#將數組中的0替換成1
echo "將數組中的0替換成1" ${array[@]/0/1}

#刪除數組的第2項
#unset 僅只是清除array[1]的值,並沒有將array[1]刪除掉 
echo '刪除數組的第2項'
unset array[1]
echo ${array[@]}

exit 0

函數:

#!/bin/bash

function foo()
{
 #定義局部變量i
 local i=0

 #定義局部變量total,傳入foo 的參數總數
 local total=$#

 #輸出參數總數
 echo "total param=$total"

 #輸出傳入foo的每一個參數
 for val in $@
 do
  ((i++))
 echo "$i -- val= $val"
 done

#返回參數總數
return $total

}

foo
foo param1 param2 param3
echo "return value=$?"

exit 0
~        

數值運算

數值元算主要有4種實現方式:(())、let、expr、bc。
工作效率:(()) == let > expr > bc**
(())和let是bash內建命令,執行效率高;而expr和bc是系統命令,會消耗內存,執行效率低。
(())、let和expr只支持整數運算,不支持浮點運算;而bc支持浮點運算。

#!/bin/bash
#4 種方式計算3*(2+5)

#1.(())
val1=$((3*(2+5)))
echo "val1=$val1"

#2.let
let "val2=3*(2+5)"
echo "val2=$val2"

#3.expr
val3=`expr 3 \* \(5+2\)`
echo "val3=$val3"

#4.bc
val4=`echo "3*(5+2)"| bc`
echo "val4=$val4"

第3,4種有問題

字符運算

#!/bin/bash

str='hello world'

echo "顯示字符串:" ${str}

echo '顯示字符串長度:' ${#str}

echo '提取world:' ${str:6}

echo '提取or:' ${str:7:2}

echo '刪除hello: '${str#hello}

echo '刪除world: ' ${str%world}

echo '將所有的l替換為m: '${str//l/m} #此處l 前兩個/,一個的話只會替換一個l

exit 0

bash 調試

bash [-nvx] scripts.sh

  • 選項與參數:
  • -n: 不要執行 script,僅查詢語法的問題;
  • -v: 再執行 sccript 前,先將 scripts 的內容輸出到屏幕上;
  • -x: 將使用到的 script 內容顯示到屏幕上,這是很有用的參數!
例子:想要執行 bash 腳本,並查看 bash 的調用流程,可以通過以下命令:

bash -x test.sh

echo [-neE] string

選項與參數:

  • -n: 輸出內容之后,不換行。默認是輸入內容之后,換行。
  • -e: 開啟反斜線“\”轉義功能
  • -E: 開啟反斜線“\”轉義功能(默認)。
  • 例子:輸出 please input a number: 之后不換行

bash 內建指令

echo
在屏幕上顯示出指定的字串

read
從標准輸入設備讀入一行,分解成若干字,賦值給 bash 程序內部定義的變量

alias
別名,alias l='ls -al'

export
export 可以把 bash 的變量向下帶入子 bash (即子 bash 中可以使用父 bash 的變量),從而讓子進程繼承父進程中的環境變量。但子 bash 不能用 export 把它的變量向上帶入父 bash。

exec
當 bash 執行到 exec 語句時,不會去創建新的子進程,而是轉去執行指定的命令,當指定的命令執行完時,該進程(也就是最初的 bash)就終止了,所以 bash 程序中 exec 后面的語句將不再被執行。

.
使 bash 讀入指定的 bash 程序文件並依次執行文件中的所有語句。

exit
退出 Shell 程序,在 exit 之后可有選擇地指定一個數位作為返回狀態。

參考:linux的命令行操作和shell的區別

bash 命令和語法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM