Linux Shell 基本語法

Linux Shell 基本語法?

一. Linux基本命令

1.1.? cp命令

該命令的功能是將給出的文件或目錄拷貝到另一文件或目錄中,功能十分強大。

語法: cp [選項] 源文件或目錄 目標文件或目錄

1.2. mv命令

用戶可以使用mv命令來為文件或目錄改名或將文件由一個目錄移入另一個目錄中。

語法:mv [選項] 源文件或目錄 目標文件或目錄

1.3. rm命令

用戶可以用rm命令刪除不需要的文件或者目錄。

語法:rm [選項] 文件

如果沒有使用- r選項,則rm不會刪除目錄。

1.4. mkdir和rmdir

語法:mkdir [選項] dir-name

語法:rmdir [選項] dir-name

1.5. cd 命令

功能:改變工作目錄。

語法:cd [directory]

1.6. ls 命令

ls是英文單詞list的簡寫,其功能為列出目錄的內容。該命令類似于DOS下的dir命令。

語法:ls [選項] [目錄或是文件]

1.7. su命令

這個命令非常重要。它可以讓一個普通用戶擁有超級用戶或其他用戶的權限,也可以讓超級用戶以普通用戶的身份做一些事情。普通用戶使用這個命令時必須有超級用戶或其他用戶的口令。

?該命令的一般形式為: su [選項] [使用者帳號]

1.8. ps命令

顯示系統中執行的程序。

語法:ps [選項]

1.9. kill命令

刪除執行中的程序

語法:kill [選項] PID

1.10. grep命令

搜尋輸出的特定文字

語法:grep 字符串

例:

ps aux | grep matlab

kill PID

1.11. echo命令

echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。

該命令的一般格式為: echo [ -n ] 字符串

1.12. clear命令

clear命令的功能是清除屏幕上的信息,它類似于DOS中的 cls命令。清屏后,提示符移動到屏幕左上角。

二. Shell的基本知識

2.1. shell提示符及其環境

提示符:$

環境:Linux,Unix,Dos等等

? Shell其實就是一個解釋執行命令的程序,所謂shell編程其實就是用一定的語法將各種基本的命令組合起來,讓shell程序去解釋執行。

同傳統的編程語言一樣,shell提供了很多特性,這些特性可以使你的shell script編程更為有用,如:數據變量、參數傳遞、判斷、流程控制、數據輸入和輸出,子程序及以中斷處理等。

2.2 如何執行shell程序

Shell程序(***.sh)

? 執行這個命令時

(1) #./***.sh

(2) #chmod u+x ***.sh

#***.sh

(3) #sh ***.sh

2.3 常量

? 字符串,例如“Hello World!”。

? 數字,例如705,23。

2.4 變量

shell編程中它們是沒有類型的,簡稱弱類型編程語言,在這個變量中可以保含一個數字,一個字符串,一個單詞等。你并不需要聲明這個變量,它會在引用這個變量時創建它。

STR="Hello World!"

echo $STR

HOME="/home"? ? ? ? ? ? ? ? //注意賦值不要有空格

a=123

HOME_LIST=$(ls /home) //把命令的執行結果賦值給變量

ehco $HOME? ? ? ? ? ? ? ? ? //$ 符號是獲得變量HOME的值

a=a+1

系統變量:

$0 這個程序的執行名字

$n  這個程序的第n個參數值,n=1...9

$*  這個程序的所有參數

$# 這個程序的參數個數

$$ 這個程序的PID

$! 執行上一個背景指令的PID

$? 上一個指令的返回值

2.5 局部變量

局部變量一般是指寫在函數中的變量,他的生命力是有限的。局部變量比較好理解,這里就不再多介紹了。

2.6 從鍵盤輸入變量值

使用read命令

read var1 var2 … varn

2.7 注釋

?Shell編程中的注釋以#開頭

2.8 數字運算

主要是指整數運算。expr命令可以將字符型變量轉換為整數進行操作

語法:expr integer operator integer

其中operator為+ - * / %, 但對*的使用要用轉義符/,如:

[oracle@localhost ~]$ more dvd.sh

#!/bin/bash

expr 5 /* 5

[oracle@localhost ~]$ sh dvd.sh

25

2.9 邏輯運算

test進行邏輯運算,用[ ]括起來就是test運算

int1 -eq int2 相等?

int1 -ne int2 不等?

int1 -gt int2 int1 > int2 ?

int1 -ge int2 int1 >= int2 ?

int1 -lt int2 int1 < int2 ?

int1 -le int2 int1 <= int2

2.10 雙引號及單引號

?$echo "$HOME $PATH"? -- 顯示變量值

/home/hbwork opt/kde/bin:/usr/local/bin:

$echo '$HOME $PATH'? -- 顯示單引號里的內容

$HOME $PATH

2.11 空格

由于shell對命令中的多余的空格不作任何處理 ,而用引號括起來則可以防止shell去掉這些空格。

$ str1=abcd

$ str2="abcd "

2.12? ? ? ? 分支結構

2.12.1 結構一

if [ variable = value ]

then

command

else

if [ variable = value ]

then

command

else

command

fi

2.12.2 結構二

if [ variable = value ]

then

command

elif [ variable = value ]

then

command

fi

if 語句示例:

if [ "22" -lt "33" ]? then? //注意空格

echo "22 less than 33"

else

echo "no"

fi? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //if語句的結束

2.13 Case語句

case value in

pattern1)

command;;

pattern2)

command;;

...

patternn)

command;

esac

case 示例:

echo "enter a number"

read ans? ? ? ? ? ? ? ? ? ? //讀取一個變量read

case $ans in

1)

echo? "you numer is $ans"

;;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //注意符號是兩個 ;

2)

echo "you number is 2"

;;

[3-9])

echo "you number is $ans"

;;

*)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //*通配符

echo "others"

esac

2.14 And 和 Or

command1 && command2

? command1 || command2

2.15 循環語句

2.15.1 For循環

for var in arg1 arg2 ... argn

do

command

....

command

done

For循環示例

int=1

for $int in 1 2 3 4 5

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

2.15.2 while循環

while command

do

command

command

command

...

Done

While循環的示例

int=1

while [ $int -le 5 ]

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

2.15.3 until循環結構

until command

do

command

command

....

command

done

Until循環示例

? int=1

until [ $int -gt 5 ]

do

sq=`expr $int /* $int`

echo $sq

int=`expr $int + 1`

done

2.16 從循環中退出: break和continue命令

break 立即退出循環

continue 忽略本循環中的其他命令,繼續下一下循環

2.17 函數 (子過程)

funcname()

{

command

...

command; #分號

}

函數示例

setup ()

{ command list ; }

do_data ()

{ command list ; }

setup

do_data

2.18? shell程序的調試

? 使用-x進行跟蹤執行,執行并顯示每一條指令。

2.19 比較運算符

2.19.1 文件比較運算符

-e filename? ? ? ? 如果 filename 存在,則為真? ? ? ? ? ? [ -e /var/log/syslog ]

-d filename? ? ? 如果 filename 為目錄,則為真? ? ? [ -d /tmp/mydir ]

-f filename? ? ? ? 如果 filename 為常規文件,則為真 [ -f /usr/bin/grep ]

-L filename? ? ? ? 如果 filename 為符號鏈接,則為真? [ -L /usr/bin/grep ]

-r filename? ? ? ? ? 如果 filename 可讀,則為真? ? ? ? ? ? ? [ -r /var/log/syslog ]

-w filename? ? ? ? 如果 filename 可寫,則為真? ? ? ? ? ? [ -w /var/mytmp.txt ]

-x filename? ? ? ? 如果 filename 可執行,則為真? ? ? ? ? [ -L /usr/bin/grep ]

filename1 -nt filename2 如果 filename1 比 filename2 新,則為真 [ /tmp/install/etc/services -nt /etc/services ]

filename1 -ot filename2 如果 filename1 比 filename2 舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

2.19.2 字符串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)

-z string? ? ? ? ? ? ? 如果 string 長度為零,則為真? ? ? ? ? [ -z "$myvar" ]

-n string? ? ? ? ? ? ? 如果 string 長度非零,則為真? ? ? ? ? ? ? [ -n "$myvar" ]

string1 = string2 如果 string1 與 string2 相同,則為真 [ "$myvar" = "one two three" ]

string1 != string2 如果 string1 與 string2 不同,則為真 [ "$myvar" != "one two three" ]

2.19.3 算術比較運算符

num1 -eq num2? ? ? ? ? ? ? ? 等于? ? ? ? ? ? ? ? ? ? ? ? ? ? [ 3 -eq $mynum ]

num1 -ne num2? ? ? ? ? ? ? ? 不等于? ? ? ? ? ? ? ? ? ? ? ? [ 3 -ne $mynum ]

num1 -lt num2? ? ? ? ? ? ? ? ? ? 小于? ? ? ? ? ? ? ? ? ? ? ? ? ? [ 3 -lt $mynum ]

num1 -le num2? ? ? ? ? ? ? 小于或等于? ? ? ? ? ? ? ? ? ? ? [ 3 -le $mynum ]

num1 -gt num2? ? ? ? ? ? ? ? ? ? 大于? ? ? ? ? ? ? ? ? ? ? ? ? ? [ 3 -gt $mynum ]

num1 -ge num2? ? ? ? ? ? ? 大于或等于? ? ? ? ? ? ? ? ? ? [ 3 -ge $mynum ]

三. Shell 的一些注意事項

3.1. 基礎

#!/bin/bash? //bash腳本第一句都是這個,他會讓系統指定以bash來解釋這個腳本

#? ? ? ? ? ? ? ? //shell腳本注釋符號

3.2. 變量

變量賦值的時候"="兩邊的內容要緊靠"="

例如:sum=0,寫java寫的時間長了總喜歡寫成sum = 0,但是這樣的結果是編輯器不識別

3.3. 在使用if、while時,在注意變量與符號之間的分割

例如:if [ `expr $a % 3` -ne 0 ],while [ "$var" != "end" ],盡量分開寫,這樣也挺好看也便于識別。

3.4.? let的意思是讓"="后面的內容做算術運算,例如:let x=a-b

3.5. 大多數情況下,可以使用測試命令來對條件進行測試,比如可以比較字符串、判斷文件是否存在及是否可讀等等……通常用" [ ] "來表示條件測試,注意這里的空格很重要,要確保方括號前后的空格。

[ -f "somefile" ] :判斷是否是一個文件

[ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執行權限

[ -n "$var" ] :判斷$var變量是否有值

[ "$a" = "$b" ] :判斷$a和$b是否相等

3.6 幾個簡單例子

for filename in $(ls)

do

cat $filename

done

for((i=0; i<10; i++))

do

echo $i

done

x=1

sum=0

while [ $x -le 10 ]? //注意[ ] 兩邊的空格

do

let sum=sum+$x? //shell中算術計算使用let

let x=x+1

done

echo $sum

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 建立一個腳本 Linux中有好多中不同的shell,但是通常我們使用bash (bourne again shel...
    某人在閱讀 2,026評論 0 0
  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,781評論 0 11
  • 基礎 頭文件 #!/bin/bash 或者#!/bin/sh #!約定的標記,如IOS的Import 執行文件時需...
    ZMJun閱讀 1,252評論 1 2
  • 1.創建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,192評論 3 53
  • 第一天的簡書生活,先來介紹自己。 Queen的中文是女王 Laurel的中文是月桂樹 Q先生的出現讓L小姐覺得自己...
    QueenLaurel閱讀 154評論 0 1