Shell 基本文法

來源:互聯網
上載者:User

標籤:blog   http   ar   os   使用   sp   for   java   on   

一. 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為+ - * / %, 但對*的使用要用轉義符/,如:

 

[[email protected] ~]$ more dvd.sh

#!/bin/bash

expr 5 /* 5

[[email protected] ~]$ 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

來自 http://blog.csdn.net/tianlesoftware/article/details/5953577

Shell 基本文法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.