shell腳本編程基礎
一.腳本的基本概念
shell腳本:包含一些命令或聲明,並符合一定格式的文本文件
shell腳本格式:首行shebang機制 #!/bin/bash #!/usr/bin/python #!/usr/bin/perl
shell腳本的用途:自動化常用命令
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件
創建shell腳本:1.使用文本編輯器來創建文本文件
第一行必須包含shell聲明序列:#! 例:#!/bin/bash
添加註釋以#開頭
運行腳本
給予執行權限,在命令行上指定腳本的絕對或相對路徑
直接運行解釋器,將腳本作爲解釋器程序的參數運行
腳本的基本結構例:
CONFIGURATION_VARIABLES 配置變量
FUNCTION_DEFINITION 定義函數
MAIN_CODE 主要代碼
腳本調試
1.檢測腳本中的語法錯誤
bash -n /path/to/som_script
2.調試運行
bash -x /path/to/some_script
二.腳本內容
變量
變量:命名的內存空間
作用:可操作的儲存空間 類型:字符
1.數據存儲方式 數值:整型,浮點型
2.參與運算
3.表示的數據範圍
Shell中變量命名法則:
1、不能使程序中的保留字:例如if, for
2、只能使用數字、字母及下劃線,且不能以數字開頭
3、見名知義
4、統一命名規則:駝峯命名法
5、用英文名字,並體現出實際
變量賦值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 變量引用:name="$USER"
(3) 命令引用:name=COMMAND
name=$(COMMAND)
變量引用:${name} 或者 $name
" " 弱引用,其中的變量引用會被替換爲變量值
' ' 強引用,其中的變量引用不會被替換爲變量
顯示已定義的所有變量:set
刪除變量:unset name
退出狀態碼
bash自定義退出狀態碼
exit [n]:自定義退出狀態碼
注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決於exit命
令後面的數字
注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決於腳本中執行
的最後一條命令的狀態碼
算數運算
bash中的算數運算:
+, -, *, /, %取模(取餘), **(乘方),乘法符號有些場景中需要轉義
實現算術運算:
1.let var=算數表達式
2.var =$[算數表達式]
bash有內建的隨機數生成器變量:$RANDOM(0-32767)
示例:生成 0 - 49 之間隨機數
echo $[$RANDOM%50]
條件性的執行操作符
根據退出狀態而定,命令可以有條件地運行
• && 代表條件性的AND THEN
• || 代表條件性的OR ELSE
bash的數值測試
-v VAR
變量VAR是否設置
數值測試:
-gt 是否大於
-ge 是否大於等於
-eq 是否等於
-ne 是否不等於
-lt 是否小於
-le 是否小於等於
bash的字符串測試
字符串測試:
= 是否等於 > ascii碼是否大於ascii碼
< 是否小於
!= 是否不等於
=~ 左側字符串是否能夠被右側的PATTERN所匹配
注意: 此表達式一般用於[[ ]]中;擴展的正則表達式
-z "STRING“ 字符串是否爲空,空爲真,不空爲假
-n "STRING“ 字符串是否不空,不空爲真,空爲假
注意:用於字符串比較時的用到的
Bash的文件測試
存在性測試
-a FILE:同-e
-e FILE: 文件存在性測試,存在爲真,否則爲假
存在性及類別測試
-b FILE:是否存在且爲塊設備文件
-c FILE:是否存在且爲字符設備文件
-d FILE:是否存在且爲目錄文件
-f FILE:是否存在且爲普通文件
-h FILE 或 -L FILE:存在且爲符號鏈接文件
Bash的文件權限測試
文件權限測試:
-r FILE:是否存在且可讀
-w FILE: 是否存在且可寫
-x FILE: 是否存在且可執行
文件特殊權限測試:
-u FILE:是否存在且擁有suid權限
-g FILE:是否存在且擁有sgid權限
-k FILE:是否存在且擁有sticky權限
使用read命令來接受輸入
使用read來把輸入值分配給一個或多個shell變量
-p 指定要顯示的提示
-s 靜默輸入,一般用於密碼
-n N 指定輸入的字符長度N
-d ‘字符’ 輸入結束符
-t N TIMEOUT爲N秒
read 從標準輸入中讀取值,給每個單詞分配一個變量
所有剩餘單詞都被分配給最後一個變量
read -p “Enter a filename: “ FILE
條件選擇if語句
選擇執行:
注意:if語句可嵌套
單分支
if 判斷條件;then
條件爲真的分支代碼
fi
雙分支
if 判斷條件; then
條件爲真的分支代碼
else
條件爲假的分支代碼
fi
if語句
多分支
if判斷條件1;then
條件1爲真的分支代碼
elif判斷條件2;then
條件2爲真的分支代碼
elif判斷條件3;then
條件3爲真的分支代碼
else
以上條件都爲假的分支代碼
fi
逐條件進行判斷,第一次遇爲“真“條件時,執行其分支,而後結束整個if語句
case
變量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默認分支
;;
esac
bash的配置文件
按生效範圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc