shell腳本基礎

shell腳本編程基礎

1、基本格式

首先在編寫shell的開始要聲明一下該shell所用的腳本類型,我們也稱為shebang機制
eg: #!/bin/bash
    # Description
     ...

2、bash中的變量的種類

(1)、本地變量  生效范圍: 當前shell進程,對當前shell之外的進程及子進程均無效
(2)、環境變量  生效范圍: 當前shell進程及其子進程
      變量聲明
             export     name=Value
             declare -x name=Value
      變量撤銷 unset name 
      變量引用
             $name 或 ${name}
      顯示所有的環境變量
             env 、export、declare -x 、printenv
(3)、局部變量  生效范圍: 當前shell進程中某片代碼段(通常指函數)
(4)、位置變量: 用$1 $2 $3 ... 來表示,用于腳本中調用傳遞給它的參數
      只讀變量: 只能聲明,但不能修改和刪除
              聲明變量 readonly name 
                       declare -r name 
              查看只讀變量 readonly -p 

(5)、特殊變量: $? $0 $* $@ $# $$
      $? 檢查上一條命令是否執行成功 
         echo $?   成功為0
                   非0不成功
      $0 表示命令本身
      $# 表示傳遞給腳本的參數個數
      $* 傳遞給腳本的所有參數  "$*" 將全部參數合并為一個字符串 
      $@ 傳遞給腳本的所有參數  "$@" 每個參數為單獨的字符串
      $$ 顯示當前自己的進程編號
(6)、在shell中() {}的區別
     (): 表示在當前shell的子進程中再開一個進程
     {}: 不在當前的shell進程中開子進程,順序執行
eg:
[root@Centos6 ~]#x=abc;(echo $x;x=def;echo $x);echo $x
abc
def
abc
[root@Centos6 ~]#x=abc;{ echo $x;x=def;echo $x; };echo $x
abc
def
def

3、算數運算

(1)、算數運算
          包括: + - \* / % **
實現算術運算:
     let Var=expression
[root@Centos6 ~]#a=100
[root@Centos6 ~]#b=200
[root@Centos6 ~]#let c=a+b
[root@Centos6 ~]#echo $c
300
     Var=$[expression]
[root@Centos6 ~]#c=$[a+b]
[root@Centos6 ~]#echo $c
300
     Var=$((expression))
     Var=$(expr arg1 arg2 ...) 注: 參數間要有空格
[root@Centos6 ~]#c=$(expr $a + $b)
[root@Centos6 ~]#echo $c
300
     declare -i Var=Value
     echo "expression" | bc
bash中有內建的隨機數生成器
     echo "$[$RANDOM%100]" : 生成0-99之間的隨機數
[root@Centos6 ~]#echo "$[$RANDOM%100]"
53
(2)、賦值
   增強型賦值: += -= *= /= %=
   eg: let a+=5  ==》a=a+5
   其中 ++a : a先自加1后在賦值給a
        a++ : 先賦值后自加1

4、條件測試

(1)、條件判斷

判斷方法:
         test expression
         [ expression ]   注意: 表達式與[]間要有空格,不支持正則表達式
         [[ expression ]] 支持正則表達式
判斷一個參數是否被賦值
         [ "$a" ]  
         echo $?  0為被賦值
                  非0未被賦值
短路與 &&
eg: CMD1 && CMD2 CMD1為真CMD2才執行
短路或 ||
eg: CMD1 || CMD2 CMD1為假CMD2才執行
與 -a 
或 -o
非 -not 或!

(2)、字符串判斷

字符串 :
     == :是否等于
     >  :ASCII碼是否大于
     <  :ASCII碼是否小于
     != :是否不等于
     =~ :左側字符串能否被右側的PATTERN所匹配
         注:此表達式一般用于[[ ]];擴展的正則表達式
eg: [[ $a =~ ^-?[0-9]+$ ]] 判斷$a是否為數字(正數、負數、0)
        [ -z "$a" ] 空為真
        [ -n "$a" ] 非空為真

(3)、文件存在性判斷

文件判斷:
         -a file :
         -e file : 文件是否存在,存在為真,反之為假
eg : [ -e "file" ]
所屬類別:
         -b file:是否存在且為塊設備文件
         -c file:是否存在且為字符設備文件
         -d file:是否存在且為目錄文件
         -f file:是否存在且為普通文件
         -h | -L file:是否存在且為連接文件
         -p file:是否存在且為管道文件
         -S file:是否存在且為套接字文件
權限類:
         -r file:是否存在r權限的文件
         -w file:是否存在w權限的文件
         -x file:是否存在x權限的文件
         -u file:是否存在suid權限的文件
         -g file:是否存在sgid權限的文件
         -k file:是否存在sticky權限的文件
文件大小:
         -s file: 文件是否存在且非空
雙目測試: 
         file1 -ef file2 :file1與file2是否指向同一個設備上的inode
         file1 -nt file2 :file1是否新于file2
         file1 -ot file2 :file1是否舊于file2

5、read命令接受參數的輸入

從標準輸入中讀取值,給每個單詞分配一個變量,剩余的單詞都被分配給最后一個變量
     -p :指定要顯示的信息
     -s :靜默輸入
     -d :指定輸入的結束符
     -t#:超時時間
eg : read -p "Please input a arguement"  aaa  
特殊用法:
         read a b c <<< "xxx yyy zzz"可以將值附給a b c

原創文章,作者:M25_ymd,如若轉載,請注明出處:http://www.www58058.com/83609

(0)
M25_ymdM25_ymd
上一篇 2017-08-04 08:13
下一篇 2017-08-04 09:22

相關推薦

  • MySQL-MMM實現MySQL高可用讀寫分離

    實驗環境 實驗拓撲 主機配置環境說明 主機名 IP地址 角色/用途 MySQL Server_ID master1 192.168.80.101 MySQL主節點,可讀寫操作 11 master2 192.168.80.102 MySQL備節點,可讀寫操作 12 slave1 192.168.80.103 MySQL從節點,僅能讀 13 slave2 192…

    Linux干貨 2016-06-01
  • 103-corosync-pacemaker-crmsh

    一、概述: 1.1 什么是AIS和OpenAIS?

    2016-11-26
  • init中的服務故障如何排除

    我們假設ypbind出故障 首先我們設 ypbind服務開機啟動 chkconfig yubind on 然后查看服務 chkconfig –list    默認是2345啟動   然后更改這個腳本,里面寄一個長期的休眠時間,模仿為錯誤 sleep 休眠時間 然后重新啟動,看看系統如何報錯。 然后系統等到要啟動該服務的時候回一…

    2017-07-22
  • Linux之旅1

    Linux之旅1  一、描述計算機的組成及其功能 計算機的組成: 1、計算機主要由:CPU(控制器、運算器)、存儲器、輸入設備、和輸出設備(輸入設備、和輸出設備又稱為I/O設備)四部分組成; 計算機個組成部分的功能: CPU:主要有控制器和運算器組成; 控制器:控制器是整個計算機的中樞神經;其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,…

    2016-09-12
  • corosync + pacemaker + iscsi實現高可用mysql (下)

    上一篇講的安裝配置iscsi,本章介紹mariadb安裝以及高可用的mysql具體實現 一、安裝配置mariadb [root@SQL1 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz  -C /usr/local \\解壓軟件包 [r…

    Linux干貨 2015-07-09
欧美性久久久久