shell 編程基礎

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

與 或
  • &與 并且and
  1. 0&0=0
  2. 0&1=0
  3. 1&0=0
  4. 1&1=1
  • | 或者 or
  1. 0|0=0
  2. 0|1=1
  3. 1|0=1
  4. 1|1=1
  • 短路或【或者】 以 || 表示
  1. cmd1 || cmd 2 ; cmd1 為真 cmd2不執行 ;cmd1為假 cmd2 要執行
  2. 它的特點是優先找真 找不著真就往后執行
  3. FALSE || { echo cmd1 ;echo cmd2 } 為假時 ||的后面加大括號 里面的命令可以都執行
shell 編程基礎
  • 短路與【并且】 以$$ 表示
  1. cmd1 && cmd 2
  2. cmd1 為假 cmd2 就不執行 ; cmd1 為真 cmd2 要執行
  3. &&短路與的特點是 優先找假 找不到假就往后執行
  • 異或 xor
  • 兩個值是異樣的 結果為真
  • 兩個值是一樣相同的 結果為假
  • 非 取反 : !
  • tmp 臨時變量 可以實現兩個數互換
即: a=4 b=6 tpm=$a (把a的值臨時放在tmp里) 再使a=$b b=$tpm 實現裝換
條件測試 test 或者 [ ]
  • test 格式 test $str1 = $str2 或者 【 $str1 = $str2 】
  1. 比較字符串 != 是否 不等
  2. = 是否相等
  3. != 是否不等于
  4. < 是否
  5. -z 看字符串是否為0 空 空為真 不空為假
  6. -n 看字符是否為非空 不空為真 空為假 或者 【 】表示
  7. -v 判斷變量是否被設置的
  8. =~ 左邊的字符串是否能夠被右側的pattern(可以寫擴展正則表達式)所匹配
注意 : 此表達式一般用在【【】】中 ;擴展的正則表達式
注意 用于字符串比較時的用到的操作都應該使用引號
【【 == * 星為通配符 】】 == 相等 != 不等
比較數字的
  1. -eq 相等
  2. -nq 不等
  3. -lt 小于
  4. -le 小于等于
  5. -gt 大于
  6. -ge 大于等于
  7. -ne 是否不等于
變量在中括號里寫的話 要加雙引號引起開 避免出現問題
  • 文件判斷 file
  1. -a 判斷文件是否存在 -e 一樣
  2. -b 判斷文件是否為塊文件
  3. -c 判斷文件是否為字符文件
  4. -d 判斷文件是否為文件夾
  5. -f 判斷文件是否問普通文件
  6. -L判斷文件是否為軟鏈接
  7. -h 存在且為符號鏈接文件
  8. -p 是否存在且為命令管道文件
  9. -S是否存在且為套接字文件
  10. -s 是否存在且非空
  11. -N 文件自從上一次被讀取之后是否被修改過
  12. -O 當前有效用戶是否為文件屬主
  13. -G 當前有效用戶是否為文件屬組
  14. -r 判斷文件是否可讀
  15. -w 判斷文件是否可寫 權限是看的實際權限
  16. -x 判斷文件是否有執行權
  17. -u 是否有suid權限
  18. -g 是否有sgid 權限
  19. -k 是否有sticky 權限

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96002

(0)
王樂王樂
上一篇 2018-04-15
下一篇 2018-04-15

相關推薦

欧美性久久久久