[bash] コマンド結果を変数に代入し、エラーが出た場合、その変数をメッセージに出したい
Amazon S3からバケット一覧取得するものです(学校の課題)。
リトライ回数上限に達して、エラーになっているコマンド(シェル変数)をエラーメッセージとして、表示させたいのですが、何も表示されないです、、、どうしたものでしょうか、、、?
【追記】
あまりに情報不足でした。
対象のS3バケットはgrepしている文字列に該当するものがないので、grepしたときにマッチせずにエラーがメッセージに表示されると想定していました。
「logger -ip syslog.err message:<エラー>」のような感じを想像していました。
linux初心者なもので、そもそもgrepの挙動自体表面的にしかわかっていないかもしれないので、見当違いなこと言っていたらぜひ指摘ください。
bash
1#!/bash/bin/ 2 3for ((cnt=0; cnt<=5; cnt++)); do 4 if [ ${cnt} -eq 3 ]; then 5 if [ ${status1} -ne 0 ]; then 6 logger -ip syslog.err "massage:""${err}" 7 exit 1 8 elif [ ${status2} -ne 0 ]; then 9 logger -ip syslog.err "message:""${greperr}" 10 exit 1 11 elif [ ${status3} -ne 0 ]; then 12 logger -ip syslog.err "message:""${awkerr}" 13 exit 1 14 fi 15 fi 16 17 #一覧取得 18 err=$(aws s3 ls 2>&1 >/dev/null) 19 status1=$? 20 greperr=$(echo ${err} | grep -E "yoda" 2>&1 >/dev/null) 21 status2=$? 22 awkerr=$(echo ${greperr} | awk '{print $3}' 2>&1 >/dev/null) 23 status3=$? 24 25 if [ ${status1} -ne 0 ]; then 26 logger -ip syslog.warn "message:Retry aws s3 ls['${cnt}']" 27 continue 28 elif [ ${status2} -ne 0 ]; then 29 logger -ip syslog.warn "message:Retry grep['${cnt}']" 30 continue 31 elif [ ${status3} -ne 0 ]; then 32 logger -ip syslog.warn "message:Retry awk['${cnt}']" 33 continue 34 else 35 logger -ip syslog.info "一覧取得完了" 36 break 37 fi 38done 39 40exit 0
回答2件
あなたの回答
tips
プレビュー