Linux--RH254---uint 11 Bash

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

2.創建新shell腳本:
1)創建包含bash命令的文本文件。文件的第一行應爲:

#!/bin/bash    ##解釋器,將腳本里的內容解釋給內核,不可隨意更改


2)使文件可執行
chmod +x scripts    ##添加可執行權限
3)將文件放置在用戶的$PATH的目錄中
~/bin – 用於用戶的私有程序
/usr/local/bin – 本地開發、系統上的其他人使用的腳本
/usr/local/sbin - 本地開發、由root使用的腳本
直接運行腳本和使用source命令運行腳本是不同的!
腳本調試模式:
#!/bin/bash -x

#sh -x scripts



3.引用和轉義
    引用和轉義在shell解析字符串時用於去除字符串中特殊字符或保留詞語的特殊含義。這會導致按字
面處理字符串,而不是展開變量或將其部分內容視作具有特殊含義。
    引用有三種類型:
    弱引用:
  將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外。換言之,變量
擴展和命令擴展在雙引號內仍起作用。

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

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



4.Shell變量

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


5.命令替換

    命令替換在子shell中執行指定命令並用命令輸出替換腳本中的命令替換。
    語法:
  $(shell command)

6.算術運算符
算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。
operator     meaning
<VARIABLE>++     增量後
<VARIABLE>--     減量後
-         減法
+         加法
**         冪運算
*         乘法
/         除法
%         餘數
+=        加等
-=        減等
Shell計算命令:
用$[]表示數學運算。

echo $[1+2]


用expr表示數學運算。

expr 1 + 2


用let指示數學運算。

let a=1+2;echo $a


用(())表示數學運算。bash內建功能,效率高。

for ((i=1;i<10;i++));do echo $i;done



7.Bash位置參數
    有兩種簡單的方法可以將用戶輸入讀入bash中的變量。
    第一個方法是使用read提示用戶輸入(使用-p選項)並將其直接存儲到一個或多個變量:
  交互式輸入

  # read -p 'Enter your first and last name: ' FIRST LAST


    另一個方法是使用位置參數來讀取傳遞給腳本的命令行參數或選項輸入。各種特殊變量存儲傳遞的選項編號Bash解析的個別參數或整個原始命令行。
  指定的位置參數總數:$#
  位置參數自身:$0、$1、$2、$3....
  所有位置參數: $@、$*
#!/bin/bash
echo \$1 is $1
echo \$2 is $2
echo \$3 is $3
echo \$* is $*
echo \$@ is $@
echo \$# is $#



8.退出狀態

    Linux命令完成時,將返回退出狀態。成功完成程序時,將返回0的推出狀態。這被bash當作邏輯True值。非零退出狀態通常表示發生了錯誤,並且被bash當作邏輯False值。
  例如:grep的退出狀態的含義:
  0 – 在指定的文件中找到了模式
  1 – 在指定的文件中未找到模式
  >1 – 一些其他錯誤(無法打開文件、錯誤的搜索表達式等)
    推出狀態的值被存儲在"?"中,可以使用以下命令查看:
  # echo $?


######腳本######
1.檢測1~10主機是否開機,開機則顯示172.25.254.X is up,關機則顯示172.25.254.X is down
A && B || C    ##A爲真則執行B,爲假則執行C
#!/bin/bash
for MUN in {1..10}
do
        ping -c1 -w1 172.25.254.$MUN &> /dev/null && echo 172.25.254.$MUN is up || echo 172.25.254.$MUN is down

done




2.添加/mnt/username中的用戶
#!/bin/bash
for NAME in `cat $1`
do
        useradd $NAME

done



3.備份/etc/目錄下以.conf結尾的所有文件,並且備份後的文件名爲etcconfig-時間戳
#!/bin/bash
BACKDIR=etcconfig-`date +%Y-%m-%d-%S`
mkdir -p /mnt/$BACKDIR
cp /etc/*.conf /mnt/$BACKDIR



4.五秒倒計時

-n 不換行    -e 執行        \r 刷新
#!/bin/bash
for ((SEC=5;SEC>0;SEC--))
do
        echo -n After ${SEC}s is end
        echo -ne "\r    \r"
        sleep 1
done



5.1分10秒倒計時

-ge 大於等於    -gt 大於    -lt 小於    -a 並且
#!/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" -a "$MIN" -gt "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



6.備份數據庫

#!/bin/bash
mkdir -p /mnt/DB_BACK/
for DB in `mysql -uroot -e "show databases;" -E -N | grep -E '\*|schema$' -v`
do
        DBNAME=$DB-`date +%Y-%m-%d-%S`
        echo "Backing up $DB"
        mysqldump $DB > /mnt/DB_BACK/$DBNAME
done
for DBNAME in `ls /mnt/DB_BACK/*`
do
        SIZE=`stat --print "%s\n" $DBNAME`
        echo $DBNAME\'s size is $SIZE byte

done



7.輸入網段查看ip
#!/bin/bash
read -p "please give me a interface:" ip_show
echo `ifconfig ${ip_show} | grep inet | grep inet6 -v | awk -F ' ' '{print $2}'`



8.檢測ip

#!/bin/bash
while [ "$#" -eq "0" ]
do
        echo "please give me a ip address!"
        exit 1
done
ping -c1 -w1 $1 >/dev/null && echo "$1 is up" || echo "$1 is down"



9.檢測文件

#!/bin/bash
ls $1 &> /dev/null

[ "$?" -eq "0" ] && echo $1 is exist || echo $1 is not exist



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章