linux基礎: shell----awk、 和shell script 的變量、運算符、if多分支 ----基本語法

一 什麼是shell script :node

  將OS命令堆積到可執行的文件裏,由上至下的順序執行文本里的OS命令 就是腳本了.
  再加上些智能(條件/流控)控制,就變成了智能化腳本了.python

 

二 變量:

  

1 爲什麼要有變量sql

    程序的運行就是一些列狀態的變值值的變化去表示shell

2 變量命名規則express

     以字母或下劃線開頭,剩下的部分能夠是:字母、數字、下劃線.bash

     最好遵循下述規範:測試

    1.以字母開頭
    2.使用中劃線或者下劃線作單詞的鏈接
    3.同類型的用數字區分
    4.對於文件最好加上拓展名ui

    5.見名之意,spa

   例如: sql_money.tar.gz,log_age.tar.bz2 code

 

3 系統變量

   set 和 env區別
   set:顯示全部變量
   env:環境變量

 

4 變量賦值

   如:money = 10

        age = 20
        echo $money
        刪除變量 unset age

5 數據類型

bash中的變量無須聲明,拿來就用.默認的變量都會是字符類型,還能夠有數字類型,普通的腳本,這兩種類型夠用了

三 運算符

  算術運算符:

    1  加  +

    2  減  -

    3  乘  *

    4  除  /

 

 邏輯運算符:

    1  大於  >

    2  小於  <

    3  等於  ==

    4  不等於 !=

    5  大於等於  >=

    6  小於等於  <=

 

賦值運算符 :

   1  =

   2  +=

   3  -=

   4  *=

   5  /=

   6 %=

   例如: a = 1

             a = a + 1   簡寫爲: a += a

              其餘的都是同樣的意思

 

1 測試文件狀態


       -d 目錄

       -s 文件長度 > 0、非空
       -f 正規文件
       -w 可寫

       -r 可讀

       -x 可執行

        -L 符號鏈接

        -u 文件有 suid 位設置

二、字符串測試
        = 兩個字符串相等
       != 兩個字符串不相等
        -z 空串
        -n 非空串

 

三、測試數值
    -eq 等於
    -ne 不等於
    -gt 大於
     -lt 小於
     -ge 大於等於
     -le 小於等於

[root@MiWiFi-R3-srv ~]# [ 10000 -gt 250 ] #不要使用大於號小於號等於號等,要使用man test中規定的

 

四、拓展測試符號 [[ ]] (())


    4.1 數字測試符號


       # [ 10 < 2 ] # 語法錯誤
       -bash: 2: 沒有那個文件或目錄
       # 

       # [[ 2 > 10 ]] # 結果錯誤
       # echo $?
       0
       # [[ 20 > 10 ]] # 正確
       # echo $?
       0
       # (( 10 < 20 ))
       # echo $?
       0

   4.2 字符測試


       # [ "aa" = "aa" ]
       # echo $?
       0
       # [[ "aa" = "aa" ]]
       # echo $?
       0
       # (( "aa" = "aa" )) #結果錯誤
       # echo $?
       1


  4.3 混合測試


       # [ a = a -a 10 < 20 ]
       -bash: 20: 沒有那個文件或目錄
       [root@seker ~]# [[ a = a -a 10 < 20 ]]
       bash: syntax error in conditional expression
       -bash: syntax error near `-a'
       [root@seker ~]# [[ a = a && 10 < 20 ]]
       [root@seker ~]# echo $?
       0
       [root@seker ~]# [[ a = a || 10 < 20 ]]
       [root@seker ~]# echo $?
       0
       [root@seker ~]# (( a = a || 10 < 20 ))
       [root@seker ~]# echo $?
       0
       [root@seker ~]# (( a = a && 10 < 20 ))
       [root@seker ~]# echo $?
       0
       [root@seker ~]# 
  結論: 
      1.1  比較數字,使用(( ))
             其餘測試使用 [[ ]]
             包含數字比較的混合測試,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))

      1.2  兩個文件的比較
             FILE1 -ef FILE2
             測試兩個文件是不是相同的inode
             有時爲了找到同一個INODE號的文件 更傾向於使用 find 命令的 -inum 或 --samefile

              FILE1 -nt FILE2
              FILE1 is newer (modification date) than FILE2

              FILE1 -ot FILE2
              FILE1 is older than FILE2

 

四 流程控制

1分支結構

 
#!/bin/bash
var='/etc/init.d'
#var='/dev/sda'
if [ -d $var ]
    then
        echo "$var is directory"
elif [ -b $var ]
    then
        echo "$var is block"
elif [ -f $var ]
    then
        echo "$var is regular file"
else
        echo 'unknow'
fi
複製代碼

 

if 測試中還能夠執行命令 根據命令的返回值作判斷
# if cd / ;then echo Y ;fi
# if grep -q root /etc/passwd ;then echo Y ;fi

向腳本傳遞參數

 
#test.sh
echo $0
echo $1
echo $2
echo $3
echo ${11}
echo '$$' $$
echo '$*' $*
echo '$@' $@
echo '$#' $#
echo '$?' $?

'''
測試:python test.sh 1 2 3 4 5 6 7 8 9 10 11
輸出結果:
./test.sh
1
2
3
11
$$ 14312
$* 1 2 3 4 5 6 7 8 9 10 11
$@ 1 2 3 4 5 6 7 8 9 10 11
$# 11
$? 0
'''
 

 

修改腳本,使其能接收調用者傳來的參數

 
[root@MiWiFi-R3-srv ~]# cat test_file.sh 
#!/bin/bash
if [ -d $1 ]
    then
        echo "$1 is directory"
elif [ -b $1 ]
    then
        echo "$1 is block"
elif [ -f $1 ]
    then
        echo "$1 is regular file"
else
        echo 'unknown'
fi
[root@MiWiFi-R3-srv ~]# ./test_file.sh /etc/passwd
/etc/passwd is regular file

             

 

只有 一個判斷條件爲單分支

  當判斷條件多餘一個時,則爲多分支

相關文章
相關標籤/搜索