一個帶參數的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位置參數運行指令碼面第參數 好了希望幫