shell腳本實例

備註:一些與傳遞給shell的參數相關的變量:
$# 命令行參數的個數
$? 調用命令的返回值
$$ 當前進程的進程號
$! 最後一個後臺命令的進程號
$0 命令行的第一個參數,也就是命令名
$n 命令行的第n個參數,若是要取超過9個參數${n}
$* 全部的命令行參數,等於("$1 $2..."
"$@" 全部的命令行參數,等於("$1" "$2"...)
$_ 前一個命令的最後一個命令行參數
mysql

 

1.     寫一個腳本,利用循環計算10的階乘sql

#!/bin/bashshell

#factorialteset數據庫

factorial=1小程序

#for a in `seq 1 10`bash

for a in 1 2 3 4 5 6 7 8 9 10服務器

do函數

factorial=`expr $factorial \* $a`命令行

done調試

  echo 「10! = $factorial」

上面的小程序可以實現求10!,可是有如下幾點須要注意:

1)     for循環的實現方式,以上兩種均可以,一種是直接寫for a in 1 2 34 5 6 7 8 9 10,而且這幾個數字不須要加任何引號。另外一種for a in `seq 1 10`,這裏用反單引號引發來,反單引號表示執行裏面的這句話,注意不能用單引號,更不能用雙引號。

2)     factorial=1在初始化的時候,這個等號左右不能有任何空格。必定要注意。

3)     factorial=`expr $factorial \* $a`,這句話要注意,也要用反單引號引發來。而且,乘號*前要用反斜槓進行轉義。其中expr命令的用法是expr Expression,是求表達式變量的值。

二、寫一個腳本,執行後,打印一行提示「Please input a number:",要求用戶輸入數值,而後打印出該數值,而後再次要求用戶輸入數值。直到用戶輸入"end"中止。

#! /bin/bash

#inputtest

var=null

while [ var != 「end」 ]

do

echo –n 「inputa integer:」

read var

if [ $var = 「END」]

then

    break

fi

echo 「var is$var」

done

 

以上程序,須要注意的是:

1)if [ $var = 「END」]這句話,必要的空格必定要有,另外,是=而不是==

2)var=null這句話,仍然注意,變量賦值,等號左右不能有空格

3)echo –n 「inputa integer:」這句話中-n表示回車不換行, 這樣寫是爲了好看,輸入和提示在一行上,固然也能夠不用-n這樣的話提示在第一行,第二行上是輸入的數。

 

三、寫一個腳本,利用循環和continue關鍵字,計算100之內能被3整除的數之和。

#!/bin/bash

#sumtest

sum=0

fora in `seq 1 100`

do

if [ `expr $a % 3` -ne 0 ]

    continue

fi

sum=`expr $sum + $a`

done

echo「the sum is $sum」

這個腳本在寫的時候實在是調試了不少遍啊。

1)一不當心就錯了。特別是何時加空格,何時不加空格

給變量賦值的時候必定不能有空格,好比sum=0,這個地方,另外,這裏不要寫成sum=null

2)在進行兩個數的運算的時候,不能直接寫成sum=$sum+$a而要寫成sum=`expr $sum + $a`

3)也就是說,賦值語句的等號左右不能有空格。算數運算符左右必定要有空格,而且用expr再賦值給一個變量。

4)整數比較的時候不能用=和!= 而要用 –eq  和-ne

 

 

四、一個函數,利用shift計算全部參數乘積,假設參數均爲整數( 特殊變量$# 表示包含參數的個數)

#! /bin/bash

#shifttest

result=1

while [ $# -gt 0 ]

do

result=`expr $1\* $result`

shift

done

echo 「the result is $result」

其中:$1表明的是第一個參數,$#表明的是參數的格式,$# -gt 0表明的是參數的個數大於0.

shift表示移位

 

五、寫一個腳本,能夠根據參數文件名,以正確的參數調用tar來解壓縮tar.gz或tar.bz2文件。

#!/bin/bash

#casetest

case${1##*.tar} in

gz)

    tar jxvf $1

    ;;

bz2)

    tar zxvf $1

    ;;

*)

    echo 「errorfile」

esac

 

備註:

$1表示運行該腳本的第一個命令行參數

${1##*.tar}表明去掉第一個參數命令行參數的*.tar後剩下的部分。

好比,運行腳本時用./mytar.shbak.tar.gz,那麼$1就是指的bak.tar.gz,${1##*.tar.}就是gz

 

同理,${3##*.tar.}表示第三個命令行參數去掉*.tar.後剩下的部分。

 

六、寫一個腳本以方便用戶查詢rpm的相關信息。這個腳本首先提示用戶選擇查詢依據,好比文件名,包名,所有等。而後提示用戶選擇查詢信息,好比包名,包裏所包含的全部文件,包的信息等。而後詢問是否繼續查詢,是則循環剛纔的過程,不然退出。

 

 

七、MySQL:Linux下自動備份數據庫的shell腳本 Linux 服務器上的程序天天都在更新 MySQL 數據庫,因而就想起寫一個 shell 腳本,結合 crontab,定時備份數據庫。其實很是簡單,主要就是使用 MySQL 自帶的 mysqldump 命令。

腳本內容以下:#!/bin/sh# File: /home/mysql/backup.sh# Database infoDB_NAME="test"DB_USER="username"DB_PASS="password"# Others varsBIN_DIR="/usr/local/mysql/bin"BCK_DIR="/home/mysql/backup"DATE=`date +%F`# TODO$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/db_$DATE.gz而後使用將此腳本加到 /etc/crontab 定時任務中:01 5 * * 0 mysql /home/mysql/backup.sh好了,每週日凌晨 5:01 系統就會自動運行 backup.sh 文件備份 MySQL 數據庫了。

相關文章
相關標籤/搜索