• 締切済み

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 -----------------------------

みんなの回答

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

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

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

#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 だったら使えないか。ごめんなさい。

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

確認がいくつか 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

flandre2
質問者

補足

確認について補足します。 質問が適切でなくてすみませんでした。 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

  • シェルの引数チェックについて

    HP-UNIX シェルで指定された引数の桁数のチェックや入力値のチェックを 行いたいと思っております。 自分なりに調べた所、awkコマンドを使用して、lengthや正規表現 でチェックできそうなのですが、シェルで指定された引数をどの ようにしてチェックすればよいのかがわかりません。 例)aaa.sh 引数1 引数2   ⇒aaa.shの中で、$@等で上記のチェックを行う???  イメージとしては、   ・if (length($1) == 10) ・$1!~/[a-zA-Z0-9]/  でも、aaa.shの中で、awkの使用方法がわかりません。 awkを使用する以上、ls -l | awk ~~~ のように、 一度、引数をファイルに出力してから、grepとパイプ機能を使用 する?しか方法はないでしょうか。 (実行環境で、パーミッションの設定でシェルを実行できない 為、上記の方法を試すには到っていません・・・パーミッションについて も、まだ理解が乏しい為。) シェルスクリプトを触り出して、まだ間もない事もあり、可能な のかどうかも判断できない状況ですが、ご存知の方がいらっしゃ いましたら、ご教授頂ければと思います。  

  • unixのシェルで

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

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

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

  • 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文字分の空白しか挿入されないです。

  • シェルスクリプトに引数を渡す方法?

    次のようなシェルスクリプトを作り、バッチ処理で実行したいのですが、うまくいかず困っています。 %ls test.sh data %less test.sh #!/bin/sh calc.exe input=$1 コマンドから通常実行するときは、 % test.sh data でうまく行きます。 これを、qsubを使ったバッチ処理で実行しなければならなくて、 %qsub test.sh data とすると、qsubは引数を1つしか取れないので、構文エラーとなり、うまく入力引数"data"を渡せません。 %qsub "test.sh data" %qsub 'test.sh data' で、引数を1つにしようとしましたが、ダメでした。 引数ファイル名"data"は、名前が変わるので、できるだけ可変になるようにしたいです。 どなたか、解決法もしくは、参考URLなど教えてください。

  • UNIXシェルのデバッグ

    サーバーを更改したので業務システムを丸ごと 新しいサーバーへコピーしてきました。メニューのシェルが数十個 あるのですが、恐らくそのまま動くとは思うのですが、一応 シェルからシェルへの移動(遷移っていうんでしょうか)くらいは 確認しようと思っています。 そのままシェルを順番に動かす以外の手法は何かありませんでしょうか? sh -xで動かせば詳細な情報をログとして残せますが、シェル内のコマンドも 実行してしまうので時間がかかります。シェル内のコマンドを実行させないで すむ手法があればご教授ください。

  • シェルでコマンドの実行結果を変数に格納する方法

    以下のようなコマンドライン引数を取得するシェルを書いたのですが 実行時にエラーになってしまいました。コマンド(第2引数以降を取得するコマンド)の実行結果を変数に格納するところでエラーになってしまいました。どのようにすればよろしいでしょうか。 「./test2.sh a b c d e」を実行し「a: コマンドが見つかりません」 というエラーが出てしまいます。 (test2.shの内容) #!/bin/sh OUTPUTFILE=$1 SRC_FILES=`"$@" | cut -d ' ' -f 2-` # 第二引数以降を取得 echo $OUTPUTFILE ←ここは表示される echo $SRC_FILES ←ここでエラー

  • unixのシェルでファイル内容を読み込む

    ど初心者です。わかりづらいかもしれませんが宜しくお願いします。 以下のような処理を行いたいと考えています。 (1) aaa.sh(シェルスクリプト)にてバッチプログラムを起動 (2)バッチでエラーの場合、結果ファイル(bbb.txt)に「1」を出力する。 (3)aaa.sh(シェルスクリプト)にて結果ファイルの内容を読み取り「1」の場合は、再度バッチプログラムを起動する。 このうち(3)の処理にて、結果ファイルの読み込み方法がわかりません。 調べた結果、以下のような処理で可能なようですが・・ while read LINE; do echo $line done < aaa.txt 読み込むのは1行なので、ループ処理にはしたくないのですが、例えば「read LINE aaa.txt」のような簡単なコマンドで、ファイルの中身を読み込むことはできないのでしょうか? 実はUNIXが初めてで、しかもスケジュールに余裕がないため焦っております。 なにぶん知識不足な故、ちんぷんかんぷんな質問かも知れませんが、よろしくお願いいたします。

  • 【Linux】シェルの実行方法を教えて下さい。

    【Linux】シェルの実行方法を教えて下さい。 ファイルの中身が#!/bin/bashで始まる拡張子shのシェルがあります。 これを実行するには、どのようなコマンドを打てばよいのでしょうか? 1.rootでログイン。 2.test.shがあるフォルダに、cdで移動する。 3.test.shと入力し、Enterキーを押す。 ↑みたいな感じで良いのでしょうか。 テスト用サーバなので、最悪壊しても良いと上司に言われましたが、 なにぶん時間がないため質問させていただきました。 Redhatでバージョンが3か4だったと思います。 よろしくお願いします。

  • 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) 何がいけないのでしょうか?教えてください。

専門家に質問してみよう