※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプトの関数)
シェルスクリプトの関数について知りたい
#!/usr/bin/bash
SOURCEBASE="`echo \"$1\" | sed 's/\.[^.]*$//'`"
DOCLEAN='no'
# 「-c」オプションで削除するファイルの拡張子一覧
CLEANEXTS='aux log toc lof lot bbl blg idx ind ilg'
show_help() {
cat <<EOF
autolatex [options] latex-source[.tex]
-c Clean temporary files before typesetting
EOF
exit 1
}
do_clean() {
for ext in $CLEANEXTS; do
if [ -f ${SOURCEBASE}.${ext} ] ; then
echo "hoge1"
echo ${SOURCEBASE}.${ext}
rm ${SOURCEBASE}.${ext}
fi
done
}
if [ $# -eq 0 ] ; then
show_help
exit 1
fi
while getopts c: flag; do
case ${flag} in
c) DOCLEAN='yes';;
\?) exit 1;;
esac
done
do_clean
#if [ ${DOCLEAN} = 'yes' ] ;then
#
# echo "hoge2"
# do_clean
#fi
やりたいこととしては*.auxや*.logファイルを-cのオプションをつけた時に削除されることです.
とりあえず手始めに取り合えず動くかの確認をしました
$ bash test.sh hoge.tex
hoge1
hoge.aux
hoge1
hoge.log
次にコメントアウトしている部分を取り除いて(さらにその上にあるdo_cleanもコメントアウトします)
#do_clean
if [ ${DOCLEAN} = 'yes' ] ;then
echo "hoge2"
do_clean
fi
$ bash test.sh -c hoge.tex
hoge2
同様に実行しました.結果は上のようになりif分はtrueで認識されているのですが,その次のdo_cleanでecho部分でのhoge1が表示されません.
if分で分岐させている時は関数を別の呼び方で呼ばないといけないのでしょうか?
さらに,
do_clean
if [ ${DOCLEAN} = 'yes' ] ;then
echo "hoge2"
# do_clean
fi
このようにしても結果は変わりませんでした.
(オプションでなにか気をつけなければならない?)
オプションをつけたときだけ該当するファイルを削除したいです,ご教授ねがいます><(なお空白はすべて全角空白になっています)
お礼
丁寧な解説ありがとうございました.