2016-7-2 Linux shell基礎知識

靜態語言:編譯型語言

          強類型(變量) 事先轉換成可執行格式

          c c++ java c#

          強類型語言的變量在使用前,必選事先聲明,甚至需要初始化


動態語言:解釋型語言

          弱類型

          邊解釋邊執行

          php shell python

          弱類型語言,變量聲明時,甚至不區分類型



編程能力:

      腳本編譯


變量類型:事先確定數據的存儲格式和長度的


    1Byte=8b   1(Byte)字節=8位(bit)

     字符型

     數值型

          整型

          浮點型



Bash變量類型

      環境變量

      本地變量(局部變量)

      位置變量

      特殊變量:$?


本地變量:

     NAME=cary   ----定義變量

     echo $NAME  ----引用變量

     Local VARNAME=VALUE  ----局部變量,作用域當前代碼段


環境變量:作用域爲當前shell進程及其子進程

     export varname=value    ----定義環境變量用export 導出關鍵字


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

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

    系統自動執行的腳本(非命令行)


在SHELL語言中,‘’單引號不做變量替換,裏面是什麼就輸出什麼。

                “”雙引號做變量替換,裏面有變量做變量替換輸出


輸出重定向

>  ---覆蓋追加

>> ---追加不覆蓋


/dev/null --數據黑洞



撤銷變量:unset varname   


查看當前shell中的變量:set


查看當前shell中的環境變量:printenv 或者env 或者export


腳本:命令的堆砌,按實際需要,結合命令流程控制機制實現的源程序


腳本的格式:腳本必須要以一個魔數開頭

#!/bin/bash

其他行數以#開頭都是表示註釋


腳本的執行:腳本的執行必須有X的執行權限,並且需要指明路徑


練習:寫一個腳本

1.添加5個用戶,user1,....user5

2.每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd命令的執行結果信息

3.每個用戶創建完成後,顯示添加賬號創建成功

#!/bin/bash

useradd user1

echo "user1" |passwd --stdin user1 >/dev/null

echo "add user1 successfully"



條件判斷:

     如果用戶存在

        添加用戶,給密碼並顯示添加成功

     否則

        顯示已經存在,沒有添加

bash 中如何實現條件判斷

條件測試類型:

     整數測試

     字符測試

     文件測試

條件測試的表達式:

     [ expression ]

     test expression


整數比較:

       -eq :測試兩個整數是否相等:比如$A -eq $B

       -ne :測試兩個整數是否不等:不等爲真,相等爲假

       -gt :測試一個數是否大於另一個數:大於,爲真,否則,爲假

       -lt :測試一個數是否小於另一個數,小於,爲真,否則,爲假

       -ge :大於或等於

       -le :小於或等於


命令的邏輯關係:

     邏輯與 &&:第一個條件爲假時,第二個條件就不在判斷,最終結果已經有

                如果第一個條件爲真是,第二個條件還需要判斷

     邏輯或 || :第一個條件爲真時,第二個條件不執行

                 如果第一個條件爲假時,還需要執行第二個條件

#!/bin/bash

!id user1 &>/dev/null && useradd user1 && echo "user1" |passwd --stdin user1 &>/dev/null ||echo "user1 exists"

!id user2 &>/dev/null && useradd user2 && echo "user2" |passwd --stdin user2 &>/dev/null ||echo "user2 exists"

!id user3 &>/dev/null && useradd user3 && echo "user3" |passwd --stdin user3 &>/dev/null ||echo "user3 exists"

USERS=`wc -l /etc/passwd |cut -d: -fl`

echo "$USERS USERS"


條件判斷,控制結構:

單分支的if語句

  if 判斷條件; then

      statement1

      statement2

      ....

  fi


eg:

  #!/bin/bash

  NAME=user1

  if id $NAME &>/dev/null;then

     echo "$NAME exsits"

  fi


雙分支的if語句

   if 判斷條件; then

      statement1

      statement2

      .......

    else

       statement3

       statement4

       ......

    fi



  eg:

   NAME=cary.qin

   if id $NAME &>/dev/null;then

      echo "$NAME exists"

   else

       useradd $NAME

       echo "$NAME" | passwd --stdin $NAME &>/dev/null

       echo "add finished"

   fi


``   ----反引號 命令的執行結果,把名稱執行出的內容提供出來



shell的數值運算

A=3

B=6

1.  let 算術運算表達式

 let c=$A+$B


2.  $[算術運算表達式]

    c=$[$A+$B]



3.$((算術運算表達式))

  c=$(($A+$B))


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