shell編程基礎【一】

shell是一個命令解釋器,偵聽用戶指令,啓動這些指令進程,並將結果返回。(交互式shell)

同時shell也是一種程序設計語言,它有變量\關鍵字,各種流程控制語句。有自己的語法結構。

shell也有很多種,最常見的是bash,它是rhel默認的shell

查看shell信息

cat /etc/shells

echo $SHELL--查看當前shell

bash --version--查看當前shell版本

 

修改用戶shell

1.vim /etc/passwd 最後一個字段

2.chsh -s /bin/ksh tan2

 

bash初始化

用戶登錄時,要執行幾個文件

/etc/profile

~/.bash_profile

/etc/bashrc

~/.bashrc

~/.bash_logout

 

工作時:

~/.bash_history命令歷史

與.bash_history相關的設置在/etc/profile中

命令歷史調用:

!!執行前一個命令

!n執行編號爲n的命令

!-n倒數第n個歷史命令

!cmd 執行最近以cmd開頭的命令

esc + .上次命令的最後參數

禁用命令歷史

1.將/etc/profile中的HISTSIZE=0

2.刪除.bash_history 再創建一個同名的指向/dev/null的軟鏈接

bash中同時執行多條命令

1.有條件執行

命令用&&或||

&&前一個執行成功,才執行後一個

||前一個執行不成功,才執行後一個

2.無條件執行

命令依次寫,用分號隔開.

 

3.在子shell中執行,(),執行完之後再退出來,將結果返回主shell

(cd /etc/X11;ls)

命令執行的返回值

Linux每個進程執行完退出後,都會給父進程一點信息,叫返回狀態,

範圍一般爲0~255的整數

0表示成功無錯誤,其他的表示各種各樣的問題

查看返回值狀態:$?

 

()可以改變執行順序

 

命令行的替換

{}字符展開

touch hello{1,2,3}.c

$變量替代(取變量值)

${}變量替代(取變量值),安全取變量

$ (())數學運算

echo $((3*5))

``或$()命令替換(取命令執行的結果)

mkdir `echo root`

先執行echo root

再執行mkdir root

或者 mkdir  $(echo $USER)

 

創建Shell步驟

1.創建一個腳本文件(第一行 #!/bin/bash)

2.設置其可執行權限

3.執行

 

如果沒有執行權限可以:

bash 文件名

source 文件名

 

shell調試

bash [option] 文件名

bash -x /test 顯示過程,顯示參數,變量值

-n檢查語法

 

1.輸入密碼,再回顯

read 讀數據,再將數據保存在變量中

格式:read [option] varname

-p提示

-s輸入時不顯示

-t n設置超時,如果幾秒內不輸入,就自動跳過

  1 #!/bin/bash

  2 

  3 read -s -p "Enter your password: " password

  4 echo "\n"

  5 echo "your password is: "

  6 echo $password

 

 

2.從鍵盤輸入兩個數,顯示其中較大的那個:

if條件判斷

格式:

if [ 條件 ]; then

commands

fi

-----------------------------------

if [ 條件 ]

then

commands

fi

 

條件判斷:

數值

-gt大於

-ge大於等於

-lt小於

-le小於等於

-eq等於

-ne不等於

 

  4 read -p "input a " a

  5 read -p "input b " b

  6 read -p "input c " c

  7 

  8 if [ $a -le $b ];then

  9         a=$b

 10 fi

 11 if [ $a -le $c ];then

 12         a=$c

 13 fi

 14 echo $a

 15 

 

3.從鍵盤輸入用戶名,輸完之後顯示 hello,xx,如果5秒還沒輸入,就顯示hello 當前用戶名

 

 

if [ 條件 ]; then

commands

else

commands

fi

 

 

----------------------------------------------------------------

4.輸入一個IP,判斷這個主機是否能夠ping通,並給出提示

 

  4 read -p "input the IP : " ip

  5 

  6 echo

  7 if ping -c 1 $ip > /dev/null

  8 then

  9         echo "ok"

 10 else

 11         echo "not"

 12 fi

 13 echo

 14 

---------------------------------------------------------------

 

Shell變量

shell變量分爲:局部變量和環境變量

環境變量中又有:

普通環境變量

位置參數

特定變量參數

 

局部變量:只存在於創建它的shell中,不能被子shell繼承

環境變量:能被子shell繼承

 

 

export B="abc" 定義爲環境變量

C="abc"缺省爲局部變量

 

 

查看變量

set查看所有變量

env查看環境變量

 

環境變量中系統內置的變量

$?命令執行的退出狀態

$$當前shellID

$PPID父進程ID

$!最新的後臺進程

$0當前執行程序的名字

$1第一個參數

$2~$10第二個到第十個參數

$#參數的個數

$*位置參數的內容

 

-----------------------------------------

./t5.sh 10.1.1.1

這樣的形式

 

 

  3 if [ $# -ne 1 ]

  4 then

  5 echo "Wrong!! Usage [./t5.sh][10.1.1.1]" 

  6 exit

  7 fi

  8 

  9 echo $1

 10 if ping -c 1 $1 > /dev/null

 11 then

 12 echo "Yeeeeeeeeeh!"

 13 else

 14 echo "Noooooooooo!"

 15 fi

 16 

 

------------------------------------------------

 

變量定義:

varname=values

變量名由字母、數字、下劃線,但不能以數字開頭

.不能出現在變量中,一旦出現立刻結束

變量區分大小寫

賦值

1.賦值時=兩邊不能有空格

2.如果變量其值含有空格,要用引號括起來

 

 

變量運算

字符運算:

字符連接:無符號連接

計算長度:${#varname}

取子串:${varname:+/-n:n}

+/-就是字符串的左右多少個,後面n代表取幾個

 

-----------------------------------------------------------------------

 

條件測試:

字符:

= 等於

!=不等於

\>大於

\<小於

-z長度是否爲0(即判斷字符是否爲空)

-n長度是否不爲0(即判斷字符是否不爲空)

 

爲兩個變量賦值(交互式輸入read,輸入內容爲字符),顯示其值比較大的

 

  3 read -p "input str1 " str1

  4 read -p "input str2 " str2

  5 

  6 if [ $str1 \> $str2 ]

  7 then

  8 echo "********************"

  9 echo $str1

 10 else

 11 echo "********************"

 12 echo $str2

 13 fi

 

 

 

------------------------------------------------------------------

 

文件:

-b filename判斷是否爲塊設備

-c filename判斷是否爲字符設備

-d filename 判斷是否爲目錄

-e filename判斷文件是否存在

-f filename 判斷是否爲普通文件

 

任意輸入一個文件名(含路徑),判斷是否存在並給出相應提示,如果不存在就創建它,並提示創建了該文件

 

read -p "input a file name(include path) :" filename

 

if [ -e $filename ]

then

echo

echo $filename "exist!"

exit 1

 

else

echo $filename "has been created !"

exec mkdir $filename

fi

 

 

----------------------------------------------------------------------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章