腳本

腳本

使用一種特定的描述性語言,依據一定的格式編寫的可執行文件,又稱作宏或批處理文件。

創建新shell腳本

  1. 開頭
    創建包含bash命令的文本文件。文件的第一行應爲:
    #!/bin/bash

  2. 權限
    文件書寫完成後,使文件可執行

    • 賦予可執行的權限 chmod +x
    • 直接指定交互執行方式 sh/bash
  3. 路徑自動檢測

    將文件放置在用戶的$PATH的目錄中

    • ~/bin ##用於用戶的私有程序
    • /usr/local/bin ##本地開發、系統上的其他人使用的腳本
    • /usr/local/sbin ##本地開發、由root使用的腳本


腳本調試模式

  1. 修改文本
    #!/bin/bash -x

  2. 終端查看
    bash -x scripts


引用和轉義

引用和轉義在shell解析字符串時用於去除字符串中特殊字符或保留詞語的特殊含義。這會導致按字面處理字符串,而不是展開變量或將其部分內容視作具有特殊含義。

  • 引用
弱引用 (“”)
將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外。換言之,變量
擴展和命令擴展在雙引號內仍起作用。
echo “can I have a $FRUIT”
echo “The current time is $(date +%r).”

強引用 (‘’)
將字符串放置在單引號中,保留字符串中所有字符的文字值,同時禁用所有擴展:
echo “Make $$$ Fast”
rm 'untitled folder'
  • 轉義

非引用的\是轉義字符。它保留了下一個字符的文字值。(例如,$PATH是確切的字符串$PATH,而不是PATH變量的內容。)
echo Make \$\$\$ Fast!
ls untitled\ folder

例子:

運行:


Shell變量

shell變量用於爲稍後在腳本中使用的名稱指定值,並且僅限於shell命令行或從中聲明變量的腳本。

  • 變量的使用
    若要定義或指定值:
    FRUIT=apple
    若要參考或使用變量:
$FRUIT   
${FRUIT}     ##兩者同意思,第二個後面可以緊接着字符



  • 常用shell默認變量:
$0 =>shell名稱
$1 =>腳本參數的第一個參數
$? =>上一個命令執行的返回碼(或者叫返回狀態),0爲正常,其他爲有錯
$# =>傳遞到腳本的的參數的總個數
$*/$@ =>表示所有的命令參數
“$*”=>將所有的參數當作一行字符串
“$@”=>將但各參數視爲一個單獨字符串
$$ =>當前shell進程編號
$HOME =>登陸目錄
$PWD =>當前工作目錄

注:返回狀態的分類:


算術運算

$ [ 數1 運算符 數2 ] ##注意在括號兩邊 要有空格進行隔開或者直接是兩對括號(())


注意:單一個等號表示賦值,也可以在前面添加let 來進行附值。

例子:倒計時10秒:


語句

for循環語法

for
    Xx in xxx
    Xx in $( seq 起始位置  步長    結束位置)
do 
done


for循環語法

while  xx
do 
    xxx
done

例子:倒計時兩分鐘10秒:


if條件判斷語句

if  xx
then
    xxx
elif  xxxx
then
    xxxxx
else
    xxxxxx
fi


case條件分支語句

例子:數據庫自動備份:

#!/bin/bash 
dir=/backupdb
if [ -d $dir ];then
   echo "目錄已經存在"
else
   mkdir $dir
   echo "$dir 目錄創建成功"
fi
# [ -d $dir] || mkdir $dir

for DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')
do
echo "backing up $DB..."
dbname=${DB}_$(date +%Y-%m-%d)
mysqldump $DB > $dir/$dbname
size=$(stat --print "%s\n" $dir/$dbname)
echo "$dbname $size"
done


Test的用法

Test 命令有兩種表示方式:

第一種:test 後面直接加參數進行運用
第二種:用 [ ] 表示test 進行運用

常用參數選項:



expect語句

用於自動回答安裝過程的交互問答.

安裝expect:

例子:自動回答建立分區:

第一種,單文件expect:

#!/usr/bin/expect
spawn fdisk /dev/vdb     ##執行的主要命令
expect "Command (m for help)"    ##預期問題的預期關鍵字
send "n\r"               ##發送回答
expect "Select (default p):"
send "p\r"
expect "Partition number "
send "1\r"
expect "First sector"
send "\r"        
expect "Last sector, +sectors or +size{K,M,G"
send "+512M\r"
expect "Command (m for help)"
send "wq\r"
expect eof



第二種,嵌入expect:





all

發佈了36 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章