Bash Scripts(Bash 腳本)I

Bash腳本基礎

BASH = GNU Bourne-Again Shell,BASH 是 GNU 組織開發和推廣的一個項目。
Bash腳本類似批處理,簡單來講就是把許多的指令集合在一起,並提供循環、條件、判斷等重要功能,語法簡單實用,用以編寫程序,大大簡化管理員的操作,並可以完成圖形工具所無法實現的功能。

如何創建新shell腳本

  1. 創建包含bash命令的文本文件。文件的第一行應爲:
    #!/bin/bash ##解釋器
  2. 使文件可執行(使用chmod +x scripts)
  3. 將文件放置在用戶的$PATH的目錄中
    ~/bin – 用於用戶的私有程序
    /usr/local/bin – 本地開發、系統上的其他人使用的腳本
    /usr/local/sbin - 本地開發、由root使用的腳本
    直接運行腳本和使用source命令運行腳本是不同的!

引用和轉義

(1)弱引用—-” ”
將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外

[root@localhost mnt]# echo "date"   ##顯示date字符
date
[root@localhost mnt]# TIME=`date`   ##``$(),表示優先執行的命令,這裏是給變量TIME定義
[root@localhost mnt]# echo "$TIME" ##顯示TIME變量
Tue Jun 20 08:35:07 EDT 2017
[root@localhost mnt]# echo "`date`" ##顯示當前時間
Tue Jun 20 08:35:29 EDT 2017

這裏寫圖片描述

(2)強引用
將字符串放置在單引號中,保留字符串中所有字符的文字值,同時禁用所有擴展

[root@localhost mnt]# echo '`date`' ##顯示`date`字符,這裏``由於強引所以僅爲字符
`date`

這裏寫圖片描述

(3)轉義
非引用的\是轉義字符。它保留了下一個字符的文字值。

[root@localhost ~]# echo `date`    ##沒有轉義的
Tue Jun 20 08:44:47 EDT 2017
[root@localhost ~]# echo \`date\`  ##轉義後的
`date`

這裏寫圖片描述

Shell變量

shell變量用於爲稍後在腳本中使用的名稱指定值,並且僅限於shell命令行或從中聲明變量的腳本。
!!!定義的變量一般爲大寫字母。
若要定義或指定值:
FRUIT=apple
若要參考或使用變量:
$FRUIT
${FRUIT}

[root@localhost ~]# TIME=`date`        ##定義變量
[root@localhost ~]# echo $TIME        ##使用變量
Tue Jun 20 08:49:19 EDT 2017
[root@localhost ~]# echo "the time is ${TIME}"    ##使用變量
the time is Tue Jun 20 08:49:19 EDT 2017

這裏寫圖片描述

算術運算符

算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。

++ 增量後
– 減量後
- 減法
+ 加法
** 冪運算
* 乘法
/ 除法
% 餘數
+= 加等
-= 減等

[root@localhost ~]# let A=1+2  ##加法
[root@localhost ~]# echo $A
3
[root@localhost ~]# let A=1-2  ##減法
[root@localhost ~]# echo $A
-1
[root@localhost ~]# let A=2*3  ##乘法
[root@localhost ~]# echo $A
6
[root@localhost ~]# let A=2**3 ##冪運算
[root@localhost ~]# echo $A
8
[root@localhost ~]# let A=10/5 ##除法
[root@localhost ~]# echo $A
2
[root@localhost ~]# let A=6%5  ##求餘數
[root@localhost ~]# echo $A
1
[root@localhost ~]# let A+=1   ##A+=1即A=A+1(由上一步運算已知A=1)
[root@localhost ~]# echo $A
2
[root@localhost ~]# let A-=4   ##A-=4即A=A-4(由上一步運算已知A=2)
[root@localhost ~]# echo $A
-2

這裏寫圖片描述

Shell計算命令

用$[]表示數學運算
用expr表示數學運算
用let指示數學運算
用(())表示數學運算。bash內建功能,效率高

[root@localhost ~]# echo $[2+4]
6
[root@localhost ~]# echo `expr 2*4`
2*4
[root@localhost ~]# echo `expr 1+2`
1+2
[root@localhost ~]# let A=2+4
[root@localhost ~]# echo $A
6

這裏寫圖片描述

循環

for循環用於值列表中的相同命令的重複。
(1)
for 變量名 in 列表值
do
操作
done ##表示結束

[root@localhost ~]# for NUM in 1 hello 2 westos 3 lee;do echo $NUM;sleep 1 ;done  ##這裏sleep 1表示1秒執行一次
1
hello
2
westos
3
lee

這裏寫圖片描述

(2)循環與計算的結合
for (())
do

done
這是一個類似C語言的for循環,它實現數值的讀取以及數值的運算((數值起始;數值終止;數值運算))

[root@localhost ~]# for ((i=1;i<10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9

這裏寫圖片描述

腳本示例

test.sh主機檢測

腳本test.sh實現檢測主機是否在運行,是則顯示up,否顯示down
ping -c1 -w1 , -c1 表示ping的次數爲1次,-w1表示結束次數

#!/bin/bash
for NUM in 172.25.254.{1..10};
do ping -c1 -w1  $NUM &>/dev/null && echo $NUM is up || echo $NUM is down 
done

這裏寫圖片描述

測試:
這裏寫圖片描述

date.sh倒計時

date.sh
實現5秒的倒計時

#!/bin/bash
for ((i=5;i>0;i--))
do echo $i;
sleep 1;
done

這裏寫圖片描述

測試:
這裏寫圖片描述

time.sh倒計時

實現1分10秒的倒計時
1)分鐘不變,秒–
2)分=0,秒=0,結束倒計時
3)分!=0,秒=0,分–,秒変59,秒–

#!/bin/bash
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
        while [ "$SEC" -eq "0" -a "$MIN" -eq "0" ]
        do
                echo "Time is end               "
                exit 0
        done

        while [ "$SEC" -eq "0" ]
        do
                echo -n "after ${MIN}m${SEC}s is end"
                sleep 1
                echo -ne "\r    \r"
                ((MIN--))
                SEC=59
        done

        echo -n "after ${MIN}m${SEC}s is end            "
        echo -ne "\r    \r"
        sleep 1
done

這裏寫圖片描述

測試:
這裏寫圖片描述

這裏寫圖片描述

conf.sh文件查找

查找/etc目錄下以.conf結尾的文件,並複製到/etcconfig-當前時間 目錄下
date +%F-%S ——%F表示full date; same as %Y-%m-%d,%S表示秒

#!/bin/bash
a=`date +%F-%S`
mkdir /etconfig-$a
cp /etc/*.conf /etconfig-$a

這裏寫圖片描述

測試:
這裏寫圖片描述

create_user.sh建立用戶

根據/mnt/userfile建立用戶
若用戶存在則顯示the user is existed

#!/bin/bash
for USER in `cat /mnt/username`
do
useradd $USER &>/dev/null && echo "successful" || echo "$USER is  existed";
done

這裏寫圖片描述

測試:
這裏寫圖片描述

check_file文件存在確認

檢測文件或目錄的存在

#!/bin/bash
ls $1 &> /dev/null && echo "the $1 is existed" || echo "the file is not existed"

這裏寫圖片描述

測試:
這裏寫圖片描述

數據庫備份

備份數據庫並保存到相應目錄,備份的文件要有時間戳,且顯示文件的大小

#!/bin/bash
mkdir /mnt/dbdir &> /dev/null
for DB in `mysql -uroot -pwestos -e "show databases;" -N -E | grep -E '\*|schema$' -v`
do
        echo "Backing up $DB"
        mysqldump -u root -pwestos $DB > /mnt/dbdir/$DB-`date +%F`.sql

done

for DBDUMB in /mnt/dbdir/*
do
        SIZE=`stat --print "%s\n" $DBDUMB`
        echo ""
        echo "$DBDUMB's size is $SIZE"
done

這裏寫圖片描述

測試:
這裏寫圖片描述

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