命令錯誤 后面的命令繼續執行
語法錯誤 后面的命令不執行
bash -n 檢查語法錯位
bash -x 查看腳本的執行過程 【排錯】
++文件屬性上的 顯示是嵌套命令
變量
- 引用變量要加$符號 echo 是顯示字符串的 如果命令能識別變量 可以不加$ 識別不了就壓加$
- 變量盡量用“ ”引起來 保留里面的格式
name =`whoami` echo “$name” 用雙引號引起來 保留里面的格式
- 弱類型 不指令類型
- 強類型 指令類型
- 變量的命令法則
- 不能以數字開頭命令
- 關鍵字不能命令
- 大駝峰 第一個單詞字母大寫
- 小駝峰 第二個字母大寫
- 局部變量
- 普通變量
- 工作范圍是當前進程
- 看當前進程的命令 開啟一個腳本就相當于在當前bash開啟了個子進程
- echo $$ 表示當前的進程編號
- echo $PPID 查看父進程
- pstree -p 樹狀的顯示進程
- 全局變量 允許往下傳 不能往上傳
- export 跟賦值的名字(不加$) 把普通變量變成環境變量 或者 export name=多少
- 父進程的變量可以一直往下傳 子進程的變量不能往下傳
- 顯示所有的環境變量 ;
env
printenv
export
declare -x
- set 顯示的變量是最全的
- unset 刪除變量 不刪除變量 它的內存空間是不會釋放的
- $SHLVL 嵌套深度 查看進程嵌套了幾次
- echo $_ 上一個命令的最后一個參數調用 用echo 已字符串的形式顯示
- 只讀變量 (常量) 只能聲明 不能修改
- readonly 定義常量
- declare -r 查看常量 =readonly -p
- (命令)開啟的子shell 一次有效
- name=wang ;echo $name( echo $name) 如果括號里的name沒賦值 就不會開啟子進程 就等同于外面的name
- { ;} 影響當前shell環境
- 10 以上要用花括號{}
- scp ‘你要傳的文件 名’ ‘對方的用戶名’@‘對方的IP地址’:‘對方指定的目錄路徑’ (跨主機傳輸文件) :你要傳的文件名要有執行權限 還要知道對方用戶的密碼
- 位置變量
- 在腳本代碼中調用通過命令行傳遞給腳本的參數
- $1 $2 $3 … :對應第1 第2,等參數
- $0 ; 命令本身 ·basename $0 去掉文件名的路徑 顯示文件名 ·
- $* 所有的參數 當系統會把所有的參數看成一個字符串
- $@ 也表示所有的字符串 但是每個參數為獨立字符串
- $# 傳遞給腳本參數的個數
- set — 清空所有位置變量
- $@ $* 只有被雙引號包起來的時候才會有差異
- shift 【n】 換位置 頂掉前面幾個 成為第一個要執行的參數
退出狀態查看
- 0 表示成功 1.。。255 表示失敗
- $? 變量保存最近的命令退出狀態 echo $? 查看
- 在腳本中 用echo $? 查看成功與失敗 是取決 腳本中最后一條命令是否成功或失敗 如果是語法錯誤 則不執行后面的命令 即echo $? 為1-255
- 在腳本后面 輸入 exit后加 數字 那么你echo $? 的值就 你指定的 exit 后跟的數字
算數運算let
- +加 , -減, *乘,/除,%取余,**乘方
- 算數運算的幾種格式
- let name=name1+name2
- name=$[name +name2]
- expr 后面直接 2+3 就可以算出
- declare -i var =數值
- let x++ = x=x+1 let x– = x=x-1 let count+=3 自加3后賦值
- declare -i x+=2 = x=x+2
與 或
- &與 并且and
- 0&0=0
- 0&1=0
- 1&0=0
- 1&1=1
- | 或者 or
- 0|0=0
- 0|1=1
- 1|0=1
- 1|1=1
- 短路或【或者】 以 || 表示
- cmd1 || cmd 2 ; cmd1 為真 cmd2不執行 ;cmd1為假 cmd2 要執行
- 它的特點是優先找真 找不著真就往后執行
- FALSE || { echo cmd1 ;echo cmd2 } 為假時 ||的后面加大括號 里面的命令可以都執行

- 短路與【并且】 以$$ 表示
- cmd1 && cmd 2
- cmd1 為假 cmd2 就不執行 ; cmd1 為真 cmd2 要執行
- &&短路與的特點是 優先找假 找不到假就往后執行
- 異或 xor
- 兩個值是異樣的 結果為真
- 兩個值是一樣相同的 結果為假
- 非 取反 : !
- tmp 臨時變量 可以實現兩個數互換
即: a=4 b=6 tpm=$a (把a的值臨時放在tmp里) 再使a=$b b=$tpm 實現裝換
條件測試 test 或者 [ ]
- test 格式 test $str1 = $str2 或者 【 $str1 = $str2 】
- 比較字符串 != 是否 不等
- = 是否相等
- != 是否不等于
- < 是否
- -z 看字符串是否為0 空 空為真 不空為假
- -n 看字符是否為非空 不空為真 空為假 或者 【 】表示
- -v 判斷變量是否被設置的
- =~ 左邊的字符串是否能夠被右側的pattern(可以寫擴展正則表達式)所匹配
注意 : 此表達式一般用在【【】】中 ;擴展的正則表達式
注意 用于字符串比較時的用到的操作都應該使用引號
【【 == * 星為通配符 】】 == 相等 != 不等
比較數字的
- -eq 相等
- -nq 不等
- -lt 小于
- -le 小于等于
- -gt 大于
- -ge 大于等于
- -ne 是否不等于
變量在中括號里寫的話 要加雙引號引起開 避免出現問題
- 文件判斷 file
- -a 判斷文件是否存在 -e 一樣
- -b 判斷文件是否為塊文件
- -c 判斷文件是否為字符文件
- -d 判斷文件是否為文件夾
- -f 判斷文件是否問普通文件
- -L判斷文件是否為軟鏈接
- -h 存在且為符號鏈接文件
- -p 是否存在且為命令管道文件
- -S是否存在且為套接字文件
- -s 是否存在且非空
- -N 文件自從上一次被讀取之后是否被修改過
- -O 當前有效用戶是否為文件屬主
- -G 當前有效用戶是否為文件屬組
- -r 判斷文件是否可讀
- -w 判斷文件是否可寫 權限是看的實際權限
- -x 判斷文件是否有執行權
- -u 是否有suid權限
- -g 是否有sgid 權限
- -k 是否有sticky 權限
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96002