• 締切済み

Linux シェルスクリプト

シェルスクリプト作成の今後の参考にしたいので 以下のスクリプトを1つでも良いので作成してみてください。 1、sono1.sh $ ./sono1 ファイル名 で、 ファイルを削除せずにあるフォルダ(例えば .box1)に移動させるスクリプト。 ただ、すでに .box1 に同名のファイルがあった場合には上書きせず、既 存のファイル、新しいファイル両方を .box1 内に保存できるようにしてください。 2、sono2.sh $ ./sono2 拡張子 で、.box2 というフォルダにあるファイルの内, 指定された拡張子をもつファイル名だけを表示するスクリプト。 3、sono3.sh 現在のディレクトリにあるファイルのうち、texファイルから生成されたフ ァイル (*.log, *.aux, *.dvi )を削除するスクリプト。 ただし、texファイルが存在しないものについては削除しない。 つまり、 333.tex 333.aux 333.dvi aaa.log が存在する場合、削除するのは 333.aux と 333.dvi だけ.

みんなの回答

回答No.2

1はルールが足りないので作りようがない。 というこど3だけ。 for f in *.tex; do T=${f%.tex}; rm -f $T.aux $T.dvi $T.log ; done この辺も参考に http://linuxjm.sourceforge.jp/index.html http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html http://linuxjm.sourceforge.jp/html/man/man1/man.1.html

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

2だけ ls .box2/*.拡張子

関連するQ&A

  • Linux シェルスクリプト

    シェルスクリプトを作る際に、汎用スクリプトを作るのが上手くいきません。 例として以下の2つのシェルの作成例を教えてください。 1、スクリプト名をrei1として platex T1.tex dvipdfmx T1.dvi xdvi T1.dvi & wc -c T1.tex T1.dvi T1.pdf ではT1.tex専用なので これを $ ./rei1.sh ファイル名 と打ちこむことでどのファイルにでも適応できるようにする 2、スクリプト名をrei2.shとして 後から指定した文字列を含む (例えばaak ak aab aba naaの5つがあった時、「aa」と指定することでaak,aab,naaの3つを選ぶ) ファイルを選び出し、それを指定したディレクトリ(このディレクトリも可能なら後から指定したい) に移動する。という動作をするシェルスクリプト。

  • 拡張子についていろいろ?です。。。

    以下の拡張子のファイルが開けません。。。 .aux .dvi .log .tag .tex .eps .pbm どれか1つでも分かる拡張子があれば 教えて頂ければと思います。 よろしくお願い致します。

  • シェルスクリプトの関数

    #!/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 このようにしても結果は変わりませんでした. (オプションでなにか気をつけなければならない?) オプションをつけたときだけ該当するファイルを削除したいです,ご教授ねがいます><(なお空白はすべて全角空白になっています)

  • シェルスクリプト

    Apache centos6.6 シェルスクリプトの質問です。 shファイルを作りたいです。 home/user/log の中にある access_logとerror_logをgzに圧縮したいです。 条件は1日前のログです。 圧縮した後gzのファイルしか残らないのですが、次のアクセスログとエラーログはちゃんと出力されますか? どうかお願いします

  • シェルスクリプトについて教えてください

    以下のようなフォルダ構成があります。 /var/tmp/組織コード/log このlogディレクトリ配下に0byteのファイルがたくさんあり、それを全て定期的に削除したいと思っています。 また、同ディレクトリにはそれ以外のファイルやフォルダも入っていて、それらは絶対に削除してはいけないものです。 以下のようなコマンドを考えたのですが、なにか懸念される点はあるでしょうか? find /var/tmp/*/log -size 0c -exec rm {} \; いろいろ調べたのですが、Linux系は初心者のため、これで妥当かどうか不安なのです。 環境はSolaris11で、bashです。 「組織コード」の部分を固定値にしてコード数分コマンドを書けば確実だとは思いますが、組織コードが増えたり変わるたびにシェルにもメンテが必要になるので、イマイチだと思っています。 詳しい方、ぜひアドバイスしていただけないでしょうか。 よろしくお願いします。

  • シェルスクリプトでエラー値取得

    Linuxをつかいシェルスクリプトを組んでいます 複数ファイルの存在有無を確認し、問題なければ、 ファイルを作成する処理を作成したいと思っています。 現在つまずいているのが以下の2点です。  (1)複数ファイルが無い場合、エラーとしたいが、「too many arguments」とででしまう。  (2)HASH.tmp情報取得中にエラーとなったらエラーを出したいが、エラー終了ステータス返却処理に流れない。 初めてで色々しらべながらやっていますが、うまくいかず止まってしまいました。 どなたかご助言お願い致します。 (1) #==============================================================================# # データ抽出用sqlファイル存在確認 # CSVファイルが無かったらエラーを出したい。 # 終了ステータス返却 # 終了ステータスが"0"以外の場合は、"1"を返却する #==============================================================================# if [ ! -f "${DATA_DIR}/"*.csv ]; then # ログ出力 OUT_MSG_LOG -E "抽出ファイルが存在しません。" OUT_MSG_LOG -E "抽出シェル - 終了 終了ステータス :1" OUT_ACT_LOG SH 12 "" OUT_ACT_LOG SH 02 "" exit 1 fi (2) #==============================================================================# # ハッシュ情報取得処理 #==============================================================================# mktemp ${DATA_DIR}/HASH.tmp >/dev/null for arg in *.csv do md5sum ${arg} | awk '{printf("%s,%s\n",$2,$1)}' >> HASH.tmp done #==============================================================================# # 終了ステータス取得 #==============================================================================# RS=$? #==============================================================================# # エラー終了ステータス返却 # 終了ステータスが"0"以外の場合は、"1"を返却する #==============================================================================# if [ ${RS} -ne 0 ]; then # ログ出力 OUT_MSG_LOG -E "抽出処理実行中にエラーが発生しました。" OUT_MSG_LOG -E "抽出シェル - 終了 終了ステータス :${RS}" OUT_ACT_LOG SH 12 "" OUT_ACT_LOG SH 02 "" exit 1 fi

  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • シェルスクリプトでmd5sum

    シェルスクリプトでmd5sumを計算して2つのファイルを比較しようとしています。 /bin/sh # ファイル名を出力 echo "fileout1_${file1DirFile}"→/var/log/httpd.log 入っています。 echo "fileout2_${file2DirFile}"→/root/httpd.log 入っています。 #-- MD5値取得 file1DirFileMD5=`md5sum ${file1DirFile} | awk '{printf("%s",$1)}'` file2DirFileMD5=`md5sum ${file2DirFile} | awk '{printf("%s",$1)}'` この後、ifで「file1DirFileMD5」と「file2DirFileMD5」比較。 <質問> #-- MD5値取得 の部分の下二行で、シェルスクリプトが止まります。 止まる原因が分からないのです。(処理が進まず、止まったままになります) 原因がわからず困っております。 別の書き方でも構わないので、解決方法はないでしょうか。 ご教授お願いします。

  • 質問!!もう一回です。(シェルスクリプト)

    次のようなLOGファイルがあるとします。 日付   時間  区分    番号 08/03/06 21:11 RECV "6105.2280 08/03/06 21:11 CALL "6.6105.2280" 08/07/06 20:35 RECV "6.6105.2280" 08/07/06 20:35 CALL "6105.2280" 08/07/06 20:37 RECV "+81.6.6105.2280 08/08/06 13:52 SEND "47963212" そこで、「08/07/06」を引数で受けたら、06年8月7日以前の履歴が削除されるように作りたいです。 例えば、スクリプト名が「test」とすると、「$ test 08\/07\/06」になりますか。。。 これで、LOGファイルの中身は 「08/08/06 13:52 SEND "47963212"」だけが残ります。 よろしくお願いします。

  • cronでシェルスクリプトが実行されない

    Linuxでファイルのバックアップを取るため backup.shというシェルスクリプトを組み、コマンドから実行する場合問題ないことを 確認しています。ところがcronに設定し自動実行すると内容が実行されておりません。 /var/log/cronを確認したところ時間通り実行されているというログは残っています。 /var/spool/cron/にrootというファイルを作成し 00 23 * * * /BACKUP/backup.shを実行させたいのです。 なぜ、手動の場合は問題がないのにcronで設定すると問題が生じるのでしょう? もし、お分かりの方は教えてください。 OSはRed Hat Linux release 8.0 (Psyche)です。