關於bash shell的相關整理與練習

    

  • 環境變量:能夠在全部的用戶進程中使用。登陸進程是父進程,shell進程是子進程。父進程初始化環境變量,子進程就均可以使用了。對應的聲明文件是:/etc/profile  、~/wuxiangdong/.bash_profileshell

    變量的聲明方式,export JAVA_HOME='/usr/local/jdk7'編程

  • 本地變量(局部變量) :做用域在一個shell,關閉終端,再開啓一個,原來聲明的變量不見了;變量設置爲只讀後不可廢棄,不可修改。變量的聲明方式:LOCALTEST=‘HELLO,BOY’echo$LOCALTEST。bash

  • 局部變量:做用域只對當前的代碼段有效,local VARNAME=value。ide

  • 位置變量:$1,$2,$3,$4這樣的變量,取參數的位置。測試

  • 特殊變量:spa

    $?上一個命令的狀態返回值。命令行

    $#參數的個數orm

    $*參數列表繼承

    $@參數列表進程

    $0命令自己 腳本自己

    程序狀態返回代碼(0-255) 0: 正確執行 1-255:錯誤執行,1,2,127系統預留;

注意:

  set命令結果是與shell類型有關。

    env查詢的是當前用戶全部的環境變量的狀況。

    export 查詢的是當前導出成用戶變量的shell變量。     

撤銷變量:unset    

變量名稱:

一、只能包含字母、數字和下劃線,而且不能數字開頭;

二、不該該跟系統中已有的環境變量重名;

三、最好作到見名知義; 

變量聲明格式:

  1. declare -i SUM=0

    integer

  2. -x(聲明成環境變量)

  3. let A=0;(聲明算術變量)

測試腳本是否有語法錯誤:

bash -n 腳本 檢查是否是有錯誤

bash -x 腳本:單步執行

3.shell編程基礎

    1)shebang:魔數

                               #!/bin/bash

                                #開頭的是註釋行,是不執行的。     

                                /dev/null :軟件設備,bit bucket,數據黑洞。 

                        注意事項:

            腳本在執行時會啓動一個子shell進程;

            命令行中啓動的腳本會繼承當前shell環境變量            

            系統自動執行的腳本(非命令行啓動)就須要自我定義須要各環境變量;

 2)腳本的開始

 SHELL-1

  1 #有沒有bash結尾的用戶,有顯示出來,沒有顯示沒有

  2 #!/bin/bash

  3 #

  4 LINES=`grep "\<bash$" /etc/passwd | wc -l `

  5 USERS=`grep "\<bash$" /etc/passwd | cut -d: -f1`

  6 if [ $LINES -gt 0 ]; then 

  7    echo -n  "there are $USERS"

  8 else

  9    echo "no such user."

 10 fi

 11 

提示:「引用」一個命令的執行結果,要使用命令引用;好比: RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;

      使用一個命令的執行狀態結果,要直接執行此命令,必定不能引用;好比: if id user1一句中的id命令就必定不能加引號;

 若是想把一個命令的執行結果賦值給某變量,要使用命令引用,好比USERID=`id -u user1`;

      若是想把一個命令的執行狀態結果保存下來,並做爲命令執行成功與否的判斷條件,則須要先執行此命令,然後引用其狀態結果,如

id -u user1

RETVAL=$?

SHELL-2

給定一個文件,好比/etc/inittab

判斷這個文件中是否有空白行;

若是有,則顯示其空白行數;不然,顯示沒有空白行。

#!/bin/bash

LINES=`grep "^$" /etc/inittab|wc -l`

if [ $LINES -gt 0 ];then

        echo "$LINES"

else

        echo "NO Blank"

fi

SHELL-3

練習:寫一個腳本

給定一個用戶,判斷其UID與GID是否同樣

若是同樣,就顯示此用戶爲「good guy」;不然,就顯示此用戶爲「bad guy」。

#!/bin/bash

USERNAME=user1

USERID=`id -u $USERNAME`

GROUPID=`id -g $USERNAME`

if [ $USERID -eq $GROUPID ]; then

  echo "Good guy."

else

  echo "Bad guy."

fi

若是不用id命令

#!/bin/bash

#

USERNAME=user1

if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then

  echo "No such user: $USERNAME."

  exit 1

fi

USERID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f3`

GROUPID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f4`

if [ $USERID -eq $GROUPID ]; then

  echo "Good guy."

else

  echo "Bad guy."

fi

相關文章
相關標籤/搜索