一個帶參數的Shell的例子,參數shell例子

來源:互聯網
上載者:User

一個帶參數的Shell的例子,參數shell例子

#!/bin/bash# Program:#   LZSH server log filter# History:#   2014/07/01  Kom     First release#   2014/07/03  Kom     Remote and multi-param support# Set PATHPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH# Set script name variableSCRIPT=`basename ${BASH_SOURCE[0]}`# Initialize variables to default valuesIP=USER=TMPOUTPUT=declare -a KEYSdeclare -a INPUTSOUTPUT=# Set fonts for helpNORM=`tput sgr0`BOLD=`tput bold`REV=`tput smso`# Help functionfunction HELP{    echo -e \\n"${BOLD}龍之守護資料過濾指令碼${SCRIPT}${NORM}的協助文檔"\\n    echo -e "${REV}用法:${NORM} ${BOLD}$SCRIPT 參數${NORM}"\\n    echo "選擇性參數:"    echo "${REV}-a${NORM}  --輸入檔案所在的IP,為空白表示本地(預設為空白)"    echo "${REV}-u${NORM}  --訪問輸入檔案所用的使用者名稱,當檔案在本地時不使用此參數"    echo "${REV}-k${NORM}  --用於過濾的關鍵字,此參數可以多個聯合使用(例如:-k物品建立 -k強化石)"    echo "${REV}-i${NORM}  --輸入檔案的全路徑,此參數可以多個聯合使用(例如:-i/home/log/objscenesserver21.log.140701-* -i/home/log/objscenesserver40.log.140701-*)"    echo "${REV}-o${NORM}  --本地輸出檔案的全路徑(例如:-o/local/lzsh.log)"    echo "${REV}-t${NORM}  --臨時輸出檔案的全路徑,當檔案在本地時不使用此參數"    echo -e "${REV}-h${NORM}  --顯示此協助並退出"\\n    echo -e "樣本: "    echo -e "${BOLD}$SCRIPT -a127.0.0.1 -uUsername -k物品建立 -k強化石 -i/home/log/objscenesserver21.log.140701-* -o/local/lzsh.log -t/tmp/lzsh.log${NORM}"\\n    exit 1}# Check the number of argument. If none are passed, print help and exit.if [ $# -eq 0 ]; then    HELPfiwhile getopts :a:u:t:i:o:k:h FLAG; do    case $FLAG in        a)            IP=$OPTARG            ;;        u)            USER=$OPTARG            ;;        t)            TMPOUTPUT=$OPTARG            ;;        i)            INPUTS[${#INPUTS}]=$OPTARG            ;;        o)            OUTPUT=$OPTARG            ;;        k)            KEYS=(${KEYS[@]} $OPTARG)            ;;        h) # show help            HELP            ;;        \?) # unrecognized option - show help            echo -e \\n"非法參數:-${BOLD}$OPTARG${NORM}"            HELP            ;;    esacdoneshift $((OPTIND-1)) #  This tells getopts to move on to the next argument######################################################################## Parameters checkif [ ${#KEYS} -eq 0 ]; then    echo "你必須指定至少一個${BOLD}關鍵字${NORM}"    exit -1else    echo "關鍵字:${BOLD}${KEYS[@]}${NORM}"fiif [ ${#INPUTS} -eq 0 ]; then    echo "你必須指定至少一個${BOLD}輸入檔案${NORM}"    exit -1else    echo "輸入檔案:${BOLD}${INPUTS[@]}${NORM}"fiif [ -z $OUTPUT ]; then    echo "你必須指定${BOLD}本地輸出檔案${NORM}"    exit -1fi    echo "輸出檔案:${BOLD}${OUTPUT[@]}${NORM}"if [ ! -z $IP ]; then    if [ -z $USER ]; then        echo "必須指定用於訪問${BOLD}${IP}${NORM}的${BOLD}使用者名稱${NORM}"        exit -1    fi    if [ -z $TMPOUTPUT ]; then        echo "必須指定在${BOLD}${IP}${NORM}上的${BOLD}臨時輸出檔案${NORM}"        exit -1    fifi######################################################################## WorkCMDK=""for k in ${KEYS[@]}do    CMDK=${CMDK}"| grep $k "doneCMDI=""if [ ! -z $IP ]; then    CMDK=$CMDK">> $TMPOUTPUT"    CMDI="echo > $TMPOUTPUT"else    CMDK=$CMDK">> $OUTPUT"    CMDI="echo > $OUTPUT"fifor i in ${INPUTS[@]}do    CMDI=${CMDI}" && cat $i $CMDK"doneif [ ! -z $IP ]; then    echo -e \\n"將要執行ssh命令:"    echo "${BOLD}ssh $USER@$IP \"$CMDI\"${NORM}"    sh -c "ssh $USER@$IP \"$CMDI\""    echo -e \\n"將要執行scp命令:"    echo "${BOLD}scp $USER@$IP:$TMPOUTPUT $OUTPUT${NORM}"    sh -c "scp $USER@$IP:$TMPOUTPUT $OUTPUT"else    echo -e \\n"將要執行命令:"    echo "${BOLD}$CMDI${NORM}"    sh -c "$CMDI"fiexit 0

參考:http://tuxtweaks.com/2014/05/bash-getopts/


編寫一個shell指令碼程式,它帶一個命令列參數,這個參數是一個檔案。#!/bin/bash
#指令碼名稱假設:test.sh
if [[ $# -ne "1" || ! -f $* ]];then
echo "Usage:./test.sh 參數(請輸入普通檔案名稱)"
exit 1
fi
uname=$(ls -l $1 | awk '{print $3}')
ctime=$(ls -l $1 --full-time | awk '{print $6}')
echo "所有者:$uname"
echo "修改日期:$ctime"
編寫一個shell程式,實現運行時帶一個參數,從小到大順序輸出該參數間的所有數描述完善啊親單獨了簡單數字迴圈
方法:
N=$1
for ((i=1; 1<=$N; 1++))
do
echo $i
fi

方法二:
N=$1
while ((i<=$N))
do
echo $i
((i++)) 或 i=`expr $i + 1` 或 let i++ 我唯寫三種常用+1迴圈
done

方法三:告訴種 awk方法實用
awk 'BEGIN{for(i=1;i<100;i++) print i}'

方法四:
N=$1
seq $1
兩行寫入指令碼即

$1位置參數運行指令碼面第參數 好了希望幫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.