shell學習筆記

1.shell基礎

1.1 基礎知識
  • 單引號和雙引號的區別:
    • 通過單引號定義變量,輸出變量內容時單引號裏面是什麼就輸出什麼,即使內容中有變量和命令也會將它們原樣輸出;單引號中不能出現單引號,即使有轉義符號轉義了也不可以
    • 通過雙引號定義變量,輸出變量時引號裏的變量及命令(要反引下)會經過解析後才輸出該變量的內容,而不是將引號中的變量或命令原樣輸出;雙引號中可以使用轉義符號
  • 註釋:shell中只有單行註釋,無多行註釋。如需要臨時註釋一段代碼,後面需要取消註釋,可以用花括號括起來作爲一個函數,代碼中沒有調用此函數,這段代碼就不會執行
1.2 shell腳本實例
#!/bin/bash
echo "Hello World !"
  • 說明:#!是一個約定標記,它告訴系統這個腳本需要什麼解釋器來執行
1.3 運行shell腳本的方式
  • 1.作爲可執行程序
chmod +x ./test.sh  #使腳本具有執行權限
./test.sh  #執行腳本

./test.sh表示在當前目錄找 test.sh 文件

  • 2.作爲解釋器參數
# 此方式運行腳本,不需要在腳本的第一行指定解釋器信息
/bin/sh test.sh
/bin/php test.php
  • 3.sh test.sh
1.4 echo的使用
# 顯示換行
echo -e "ok! \n" #-e開始轉義
echo "It is a test"
#OK!
#
#It is a test

# 顯示不換行
echo -e "ok! \c" #-e開始轉義 \c不換行
echo "It is a test" # OK! It is a test

# 顯示結果定向至文件
echo "It is a test" > myfile

# 顯示命令執行結果,命令需要用``反引號
echo `date`

2.shell變量

2.1 變量的命名規範
  • 變量名和‘=’之間不能有空格
  • 變量名可以包含數字、字符和下劃線,但不能以數字開頭(可以以下劃線開頭)
  • 變量名中間字符不能有空格
  • 不能使用標點符號
  • 不能使用bash中的關鍵字
2.2 取變量的值
  • 使用一個變量時,在變量名前加上$符號即可,變量名外面的花括號可選,可以加也可以不加
# 給變量賦值
your_name="qinjx"
# 取變量值並輸出
echo $your_name
# 變量名外面的花括號是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界,如:echo "I am good at ${skill}Script" => 若不加上{},那麼系統則會當做:$skillScript
echo ${your_name}
2.3 環境變量
  • 作用:一般用於定義shell的運行環境,可以通過環境變量來確定登錄用戶名、命令路徑、終端類型、登錄目的等
  • 創建與刪除

    • 創建臨時的環境變量:可以在命令行中設置,但用戶退出命令行時這些變量值就會丟失,設置方法有如下三種:

      • 1.export name=value
      • 2.name=value export name
      • 3.declare -x name=value
    • 創建永久的環境變量:可以在.bash_profile或者.bashrc文件中或在/etc/bashrc/etc/profile/etc/profile.d/中定義,實例:

      • 1.在/etc/profile文件中添加變量CLASSPATH【對所有用戶生效(永久的)】
      
      # 1.打開 /etc/profile 文件並加入如下行:
      
      export CLASSPATH="my test classpath";
      
      # 2.保存文件後需要執行 source /etc/profile 才能馬上生效,否則只能在下次重進此用戶時才能生效
      
      
      • 2.在用戶目錄下的.bash_profile(/home/elaine/)文件中增加變量,方法同上【對單一用戶生效(永久的)】
      • 說明:將環境變量保存至上述文件中,每次用戶登錄時這些變量值都會被初始化一次,若想要修改後馬上生效,需要執行source /etc/profile,否則只能在下次重進此用戶時才能生效
    • 刪除環境變量:使用unset命令,可以直接在命令行中輸入unset name
2.4 變量的說明
  • 已定義的變量可以重新被定義
  • 變量中需要加入命令:使用反引號即可,如下例:

     _filename=`ls`;
     echo $_filename;
    
    # 運行以上兩句,將會將當前目錄下的所有文件名與文件夾名稱全部輸出
    
  • 只讀變量:用readonly關鍵字標記變量即可

  • 刪除變量:unset即可刪除變量,變量被刪除後不能再次使用,且不能刪除只讀變量
  • shell的變量類型:運行shell時會同時存在三種變量
    • 局部變量:局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啓動的程序不能訪問局部變量
    • 環境變量:所有的程序,包括shell啓動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量
    • shell變量:shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行

3.shell字符串與數組

3.1 字符串基礎用法
# 拼接字符串
str="${_str}${_str1}";
echo "拼接字符串_str與_str1後的字符串爲:$str";

# 獲取字符串長度
echo "length(_str) = ${#_str}";

# 截取字符串
# 第一位從0開始哈
subStr=${_str:10:6};
echo "截取字符串_str從第11個字符開始的後6個字符爲:$subStr";
3.2 數組基礎用法
  • 數組聲明:array_name(value1 value2...valuen)
  • 獲取數組的值
    • 獲取數組中某個元素:${array_name[0]}
    • 獲取數組中所有元素:${array_name[*]} or ${array_name[@]
  • 獲取數組長度:${#array_name[*]} or ${#array_name[@]}

4.shell參數傳遞

4.1 傳遞參數基礎用法
# 傳參方式,在執行腳本後帶上參數,參數間用空格隔開
$ ./test.sh 111 222 333

# 取參方式,$n的格式獲取,n爲數字,1表示第一個參數,2表示第二個參數...,其中$0爲執行的文件名
echo "執行的文件名:$0"; #./test.sh
echo "第一個參數:$1";  #111
echo "第一個參數:$2";  #222
echo "第一個參數:$3";  #333
4.2 特殊字符
字符 說明
$* 以單個字符獲取所有的參數,”1 2$3…”
$@ 獲取所有的參數,”1"" 2”“$3”…
$# 獲取輸入參數的個數
4.3 read的常用方式
  • 從終端輸入顯示的值並讀取:read -p or echo -n
# echo -n指定提示符
echo -n "Enter your name:"
read name;
echo "hello,$name,we are friends now!";

# 用read -p來直接指定提示符
read -p "please Enter your name:" name;
echo "hello,my name is $name";

# read -p指定多個變量
read -p "Enter your name:" first middle last
echo "Checking data for $last, $middle, $first"
  • 隱藏從終端輸入的值並讀取
# 輸入時不顯示,如密碼等
read -p "please Enter your password:" -s password;
echo "my password is $password";

5.shell基本運算符

5.1 關係運算符
運算符 說明
-eq 判斷兩個數是否相等,相等返回true
-ne 判斷兩個數是否不相等,不相等返回true
-gt 判斷左邊的數是否大於右邊的數,是則返回true
-lt 判斷左邊的數是否小於右邊的數,是則返回true
-ge 判斷左邊的數是否大於等於右邊的數,是則返回true
-le 判斷左邊的數是否小於等於右邊的數,是則返回true
5.2 布爾運算符
運算符 說明
非運算符,表達式爲false則返回true,否則返回false
-o 或運算符,有一個表達式爲true則返回true
-a 與運算符,兩個表達式都爲true才返回true
5.3 邏輯運算符
運算符 說明
&& AND
`
5.4 字符串運算符
運算符 說明
= 判斷兩個字符串是否相等,相等返回true
!= 判斷兩個字符串是否相等,相等返回false
-z 判斷字符串長度是否爲0,爲0返回true
-n 判斷字符串長度是否爲0,不爲0返回true
字符串本身 判斷字符串是否爲空,不爲空返回true,例:[$a]返回false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章