• 締切済み
  • 困ってます

UNIXのシェル

シェルに関して質問です。 0526とか0525のところは一日ごとにフォルダが作成されます。 unix\yasu\0526\hobby\test.txt unix\yasu\0526\hobby\test.txt unix\tomo\0525\hobby\test.txt unix\tomo\0525\hobby\test.txt ./check.sh MMDD 実行するときにMMDDのところに日付を入れてフォルダがあればコマンド1を実行するようにしたいです。 引数に指定した文字を判定するにはどうしたらいいのでしょうか? よろしくお願いします。 ----------------------------- #シェルの名前は「check.sh」です #! /bin/sh if [ $1 = "日付" ] ; then コマンド1 else コマンド2 fi -----------------------------

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数339
  • ありがとう数0

みんなの回答

  • 回答No.3
  • OKwebb
  • ベストアンサー率44% (92/208)

補足の補足 Solaris だったら find コマンドの -prune オプションで似たようなことができたはず。 検証環境がないので申し訳ないですが。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • unixのシェルで

    シェルを実行して、ファイルAの内容と、引数Aを連結してファイルBを作成したい場合にはどうしたら良いですか? 例> 実行するシェル : test.csh ファイルAの内容 : 123456 引数A : 9 作成したいファイルBの内容 : 1234569 123456と9の間にSPACEは入れないようにしたいのですが、どうしても入ってしまいます。 よろしくお願いします。

  • UNIX のシェル 文字の置換について

    シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

  • UNIXのシェルについて教えてください。

    UNIXシェル初心者です困っていますので教えてください。 (例) /tmp/test.txtのファイルがあるといたします。 このファイルの中身は、下記のようになっております。 01 一番 一郎 02 二番 次郎 04 三番 太郎 05 四番 吾郎      ・      ・ この中身をUNIXシェルを利用して/tmp/test1.csvに書き出し 内容を下記ように変更したいです。 01 一番 一郎 背番号 01 である。 02 二番 次郎 背番号 02 である。 04 三番 太郎 背番号 04 である。 05 四番 吾郎 背番号 05 である。      ・      ・ 実際に実施した/tmp/test.txtファイルは何百行もあり手動で作成するのは 手間です。 よろしくお願いいたします。

  • 回答No.2
  • OKwebb
  • ベストアンサー率44% (92/208)

#1 補足 > 2.できれば日付でチェックしたいですが、 チェックするのであれば find=`find /unix -mindepth 2 -maxdepth 2 -type d -name $1` の前に$1をチェックしてください。 Solaris だったら > 「TZ」を前日日付(-15時間)に指定すればいい でうまくいくと思いますけど。 > findコマンドで「-mindepth 2 -maxdepth 2」というのはどのディレクトリを指すのでしょうか? /unix を 0として2つめの深さです。 検証してるのがLinuxなので、オプションは違う可能性大ですね。 Solaris だったら使えないか。ごめんなさい。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • OKwebb
  • ベストアンサー率44% (92/208)

確認がいくつか 1.以下2行及び次の2行は全く同じだと思いますがこれは間違いですよね? > unix\yasu\0526\hobby\test.txt > unix\yasu\0526\hobby\test.txt 2.チェックしたいのは引数とディレクトリの3番目の比較であって別に日付に限らなくていいんですよね? 3.チェックしたいのはディレクトリが存在するかどうかであって、yasuにしかないまたはtomoにしかなくてもいいんですよね? こんな感じかな #/bin/sh find=`find /unix -mindepth 2 -maxdepth 2 -type d -name $1` if [ -n "${find}" ]; then コマンド1 else コマンド2 fi

共感・感謝の気持ちを伝えよう!

質問者からの補足

確認について補足します。 質問が適切でなくてすみませんでした。 1.日付違いのフォルダでした。以下が正しいです。 unix\yasu\0526\hobby\test.txt unix\yasu\0525\hobby\test.txt unix\tomo\0526\hobby\test.txt unix\tomo\0525\hobby\test.txt 2. できれば日付でチェックしたいですが、日付でなくとも構いません。 日付であればよりよいというだけです。 日付であればシェルの中で、「TZ」を前日日付(-15時間)に指定すればいいのかと思ったのですが、envをうってみても「TZ」が出てきませんでした。 cygwinを使用しているからでしょうか? 3.そうです。 追加の質問なのですが、findコマンドで「-mindepth 2 -maxdepth 2」というのはどのディレクトリを指すのでしょうか? また、stringを用いて文字列のチェックはできますでしょうか?

関連するQ&A

  • sedコマンドをシェルで実行でうまくいかない

    sedコマンドをシェルで実行しようとしています。 sedコマンドの引数がシングルクォートのためうまく出来ずに困っています。 テキスト内の /abc を xxx と変えたいとします。 以下のように作ってみました。 #!/bin/sh a='\/abc' b=xxx sed \'$a/$b\' txt しかし 認識できないコマンドです: '\/abc/xxx' というエラーが出ます。 $aで扱いたい変数は実はもっと長いパスの為、 ぜひ変数を使いたいのですが、うまくやる方法は無いでしょうか。

  • unixのシェルを自動で、キックしたい

    現在のUNIXのデイリーバッチジョブの起動を、できる範囲で自動化したいのですが、 UNIX初心者の為、どうしたら良いのか、全く判りません。 《現在の流れ》 (1)windows のoutlookメールで、バッチジョブの依頼を受ける。(リクエスト項目は、対象日付と対象時間) (2)telnetでunixサーバにログインして、対象の業務のシェルの日付をパラメータで渡して、 手動でシェルをキックをする。 (3)cronで完了メールと実行ログの送出をする。 unixは、HP-UX11.0で、kシェルを使用しています。 上記のような事は、どうしたら実現できるのでしょうか?。 また、wshで、メールの解析をして、バッチジョブ依頼メールから、リクエスト項目を抽出し、 unix シェルの自動起動をする。などという事は、可能なのでしょうか?。 どなたか、詳しい方、お教え願い下さい。 よろしくお願い致します。 同じような運用の仕方をされている方、もしくはお判りの方、ぜひお教えください。

  • シェルの中からシェルを呼び出して判定

    UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。

  • UNIXシェルプログラミング間違い探してくださる方。。。

    UNIXシェルプログラミング間違い探してくださる方。。。 わかりません、実行できません、おねがいします 知識浅いので"ハア?"って思うかも・・^^; trashという名のフォルダにいらないファイルを移動(sh プログラム名 ファイル名 で) すでに同名のファイルがあればファイルの最後にdをつける(なんでもいいんですが、) dがついてるファイルがすでにあるならddをつける #!/bin/sh trashname="$1" error=0 cd trash/ || exit 1 #trashへ移動 while : do if [ test -f "$trashname" && "$error" -le "10" ];then #10回エラーしたら終了 trashname="trashname""d" #名前→名前d error=`expr $error + 1` echo "$error" else break fi echo "No match" done if ($error -gt 10);then echo "$trashname :EROOR" else mv ../"$1" "$trashname" echo "Congratulations." fi

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

  • CRON で シェル を動かしたい

    Fedora Core で バックアップを取るため夜にJOBを実行させたく思っています。調べた所crontabでスケジュールできるとの事なのでテストをしているのですがうまくいきません。 1. mkdir /home/postgres/BKUP/test このコマンドをcrontab -e に直接書くと狙った時間にtestフォルダが作成されます。 2. バックアップを取る際はもう少し色々やることになると思うのでシェルにして実行させました。ここではテストなので先ほどと同じ分をシェルに書いてcrontab -eでスケジュールしますが作成されません。 ***シェルの内容*** #!/bin/sh mkdir /home/postgres/BKUP/test *********************************** ・/var/log には履歴がかかれていました。 ・シェルには全ての権限をつけました。(777) 何がいけないのでしょうか?教えてください。

  • HP-UXでJAVAのAPよりUNIXのシェルを叩きシェル内のコマンドの戻り値を拾う方法を教えて下さい。

    お世話になります。 シェルの作成と戻り値の件で教えて頂きたいと思っております。 HP-UXでJAVAのAPよりUNIXのシェルを叩き、シェル内で実行したコマンドの戻り値をJAVAのAPで拾う事は出来るのでしょうか? ※コマンドはsophos(ウィルスソフト)のsweepコマンドを想定しています。sweepコマンドの戻り値を拾いJAVAのAP内でハンドリングしたいと考えています。 大変恐縮ですがご教授頂ければ幸いです。

  • シェルで外部ファイルを取り込む方法

    こんにちわ。 既存のテーブルに新規にレコードを追加するシェルを作って おります。 今回は、test.txtに追加項目を記入しておき $test.sh test.txt と実行することで処理を行っております。 今後の運用を考えて $test.sh と実行するだけでレコードが追加されるようにしたいと 思うのですが、test.shにtest.txtの内容を取り込んで使用 するにはどのように記述すればよいのでしょうか? 「現在の設定」 -test.sh---------------- #!/bin/sh (定義等) insert into ○○○ ( key1 key2 ) values ( '${key1}', '${key2}' -test.txt--------------- key1=12345 key2=日本 どなたかご教授いただけますと幸いです。 以上、よろしくおねがいいたします。

  • UNIX Cシェルで実数の比較

    UNIX Cシェルで実数の比較がしたいのですが、 うまくいきません 以下のような結果になります。 うまく判定するにはどうすればよいのでしょう #!/bin/csh -f set CONSIZE=-0.01 echo "CONSIZE = $CONSIZE" @ CONSIZE = $CONSIZE if( $CONSIZE < 0.0 )then echo " 0以下;;; $CONSIZE" exit endif 実行 CONSIZE = -0.01 @: 数値形式が正しくありません。

  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl