• 締切済み

shellについて

#/bin/shについて教えてください。 if文条件にてプロンプト(aiueo>)が返ってきたら、 lsコマンドを発行するシェルを作成したいと考えています。 プロンプトをコマンド発行の条件とすることは可能でしょうか? ご回答のほどよろしくお願いします。

みんなの回答

  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.3

プロンプトが出ると言うことは、その前に実行したコマンドが終わったと言うことなんで、ふつうに次の行にlsと書けばいいと思います。 #!/bin/sh 前のコマンド ls

rapid6
質問者

お礼

プロンプトの違いで判定を行うのはシェルでは無理とのことですので、perlにて実施したいと考えます。どうもありがとうございました。

noname#17587
noname#17587
回答No.2

そもそも何がやりたいのかを書いていただければ 良いアイデアを出せるかもしれないですよ

rapid6
質問者

お礼

ご回答ありがとうございます。すみません説明不足でした。いろいろ調べた結果、プロンプトの違いで判定を行うのはシェルでは無理とのことですので、perlにて実施したいと考えます。どうもありがとうございました。

noname#17587
noname#17587
回答No.1

いまいち状況がわかりませんが 無理な気がします if文で判定する条件はどうやって読み込むつもりでしょう? むしろマクロ(Teramacroとか)で対応できそうな気がします

rapid6
質問者

お礼

ご回答ありがとうございます。 >if文で判定する条件はどうやって読み込むつもりでしょう? そうなんですよね。この問題を解決する方法がもしかしたらあるのでは?と思い質問させて頂きました。 >むしろマクロ(Teramacroとか)で対応できそうな気がします 私もTeraTermMacro対応できるものと考えております。もうしばらく悩んで解決できそうにないときはTeraTermMacroを利用してみようかと考えています。

関連するQ&A

  • コマンドプロンプトIF条件文について

    コマンドプロンプトにて if条件文を作成したいと考えています。 ~~~~~~~~~~~~~~~~~~~~~~~~~ @echo off set /P return= IF "%return%" =="hi" ( GOTO NEXT ) ELSE ( EXIT ) :NEXT ECHO aiueo ~~~~~~~~~~~~~~~~~~~~~~~~~ にて hi と入力すると aiueo が出力されます。 この hi の部分をワイルドカードに指定したいと思います。 どのような形をとればよろしいのでしょうか? よろしくお願いします。

  • Bourne Shell と POSIX について

    現在、会社でLinux 上でバッチプログラムを何本か作成しています。 その中で、規約に「シェルはB シェルとし、冒頭には /bin/sh と すること」というようなことが書かれていました。 これは互換性を意識してのことだと解釈し、拡張表現を使用しないことを 意識して書いていました。 具体的には、export VAR=VALUE みたいな書き方はせずに、 VAR=VALUE; export VAR みたいにするとか。 ところが、Solaris を触る機会があって、そのプログラムを 動かしてみると正しく動きませんでした。 その原因は、関数内でローカル変数を宣言するために local を 使っていたのですが、それが Solaris の /usr/bin/sh が 解釈してくれないためでした。 そこで、以下の疑問点が上がってきましたので、 可能な箇所だけでも回答をお願いできたらと思っています。 1. Solaris の /usr/bin/sh は POSIX に準拠しているのでしょうか? 2. 互換性を意識するのであれば local は使用しない方がよいという 結論だと思っています。それでは、local を使用せずにローカル変数を 使用したい場合や再帰処理を行いたい場合はどのような方法を使うのが 一般的なのでしょうか? それとも、拡張機能無しにそのようなことは できないと考えるべきなのでしょうか? 3. そもそも、POSIX でシェルに求められる必要条件とはどのようなこと があるのでしょうか?(どのようなことが規定されているか。 Google検索で見つけられなかったので、原文がWeb 公開されているので あればURL 指定でも・・・)

  • Shellモジュールについて教えてください。

    CPANもみたのですが、 Shellモジュールで使えるコマンドはどういうものがあるのでしょうか?/bin/shで使えるコマンドすべてということでしょうか?

    • ベストアンサー
    • Perl
  • cygwinシェルスクリプト内でのエイリアス

    cygwinのterminal上で alias abc=ls abc とやるとlsを実行したことになるのですが、 内容が #!/bin/bash alias abc=ls abc のa.shというシェルを作り実行すると、 ./a.sh: line 3: abc: コマンドが見つかりません というエラーが出て実行してくれません。 解決策が分かる方よろしくお願いします。

  • shellスクリプトから別のshellスクリプトを呼び出す方法

    今現在VineLinux4.1をサーバとして起動させております。 その関係もありまして維持としてシェルを動かす事はある意味必須の状態です。 本題はAと言うスクリプトからBと言うスクリプトを呼び出す方法がわかりません。 試してみた方法はsourceで呼び出す方法です。 A.shの中身を以下とすると #!bin/bash echo ="B.shを呼び出します" source B.sh echo ="シェルスクリプトを終了します" exit 0 上記のようにした場合、最初のecho文は出力され、B.shの内容を一通り終えると最後のechoは出力されずA.shは完了しません。 ごくごく基本的なことかもしれませんが、うまく検索にも引っ掛けられなかったので、ご質問させていただきます。 よろしくお願い致します。

  • 質問します。

    質問します。 シェルスクリプトで 標準出力とエラー出力をテキストに「追記で」出力するには どうすればよいでしょうか? コマンドプロンプトでは「sh test.sh >>& aaa.txt」 でうまくいくのですが、 シェルスクリプトで同じコマンドを発行すると、 「syntax error near unexpected token `&'」が発生します。

  • shellスクリプトに複数の引数を渡したい

    shellスクリプトに複数の引数を渡したいと考えています。 下記のようなperlスクリプトを兼ねる事でやりたいことは達成できました。 これをシェルスクリプトだけでやろうとしていて、ハマってしまい、やり方がわからなかったので、質問しています。 ・echo.shの中身 $ cat echo.sh echo $1 $2 ・imglist.plの中身 $ cat imglist.pl my@imglist= `ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} 2>1&`; foreach(@imglist){ my@name=split /\./,$_; system("bash ./echo.sh $name[0] $name[1]"); } ・実行すると、無事echo.shに引数が2つ渡る。 $ perl imglist.pl abc1 jpg abc10 png abc11 png abc2 jpg abc3 jpg これをシェルのみでやろうとして、はまってしまいました。 以下は、パイプ処理等を使ったりしてやってみたのですが出来ませんでした。 ・awkでファイル名と拡張子に分解し、パイプで渡そうとしても何故か渡らない・・ $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}'| bash ./echo.sh ・ファイルに一旦保存し、catコマンドでパイプで渡しても駄目 $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}' > imglist.txt $ cat imglist.txt | bash ./echo.sh ・echoコマンドを使ってパイプで渡しても駄目 $ echo `cat imglist.txt` |bash ./echo.sh ・for.shというファイルを作成し、for構文でimglist.txtの中身を渡すと引数が一つずつしか渡らない $ cat for.sh for id in $(cat imglist.txt); do echo $id done $ bash for.sh tile1 jpg tile10 jpg どうやれば、コマンドライン上やシェルスクリプトだけで、今回はファイル名と拡張子という形で複数行からなる2つの引数を渡すことができますでしょうか

    • ベストアンサー
    • Perl
  • shellのワイルドカードについて

    こんばんは。 shellを書いておりましたが、 ワイルドカードの部分で躓いてしまいましたので、 なにとぞご教授頂ければと思います。 【シェルの内容】 IPアドレスを入力。 IPアドレスの範囲が[0-255].[0-255].[0-255].[0-255]であれば"OK"を表示 このワイルドカードの部分がうまく判定されないのです。 よろしくお願いします。 #/bin/sh echo -n "To what is IPaddress set ? " read IPADDR if [[ [0-255].[0-255].[0-255].[0-255] = $IPADDR ]] then echo -n "OK!" fi exit 0

  • Apache・tomcat同時再起動シェルスクリプト作成

    見よう見まねで初めて下記のシェルスクリプトを作成しました。 権限をrootに変更する文を追加したいのですが 良く解りません。ご教授よろしくお願い致します。 作成目的は、アプリプログラム反映時、一回のコマンド発行で起動を 行いたく作成しました。(面倒なので) #!/bin/bash # ############################################### # ## アプリサーバ二重化用手動再起動コマンド ### # ############################################### # ############## 環境設定 ####################### export PATH="/usr/local/apache2/bin" export CATALINA_HOME="/usr/local/tomcat" export JAVA_HOME="/usr/local/jdk1.5.0_10" export PATH="/usr/local/jdk1.5.0_10/bin" export TOMCAT_HOME="/usr/local/tomcat" # ############## 変数代入 ####################### # CMD1=`ps -ef | grep java | grep -v grep | wc -l` CMD2=`ps -ef | grep httpd | grep -v grep | wc -l` # ############## 停止コマンド発行 ############### # /usr/local/apache2/bin/apachectl stop if [ "$CMD2" -ge "1" ] ;then killall httpd /usr/local/tomcat/bin/shutdown.sh elif [ "$CMD2" = "0" ] ;then /usr/local/tomcat/bin/shutdown.sh fi # ############## 開始コマンド発行 ############### if [ "$CMD1" -ge "1" ] ;then killall java /usr/local/tomcat/bin/startup.sh elif [ "$CMD1" = "0" ] ;then /usr/local/tomcat/bin/startup.sh fi if [ "$CMD1" -ge "1" ] ;then /usr/local/apache2/bin/apachectl start elif [ "$CMD1" = "0" ] ;then /usr/local/tomcat/bin/startup.sh     /usr/local/apache2/bin/apachectl start fi

  • shはシェルなのかコマンドなのか?

    http://d.hatena.ne.jp/KishikawaKatsumi/20080504/1209922424 で $ sudo sh j2sdk-1_4_2_13-linux-i586-rpm.bin $ sudo rpm -ivh j2sdk-1_4_2_13-linux-i586.rpm と、shと打ち込むと最後の.binが消えますが、shは シェルなのか、それともコマンドなのかどちらなの でしょうか? 手元にあるlinuxの入門書には「shはシェルの一種である」 と記述があります。googleで検索をしてみましたが、 コマンドであるような記述もあり、混乱しております。 また、その入門書には「シェルを切り替えるには、コマンドライン でシェルの名前を入力します。exitコマンドで、元のシェル に戻ります」とあり、その文章の下には実際にshと打ち込んでexit で元に戻る様が書いてあるので実際に試してみました。 [root@localhost ~]# sh sh-3.2# exit exit [root@localhost ~]# この記述のせいでますますわからなくなりました。 なお、最後のbinがシェルスクリプトであることは理解して おります。 ご存じの方、ご教授頂ければ幸いです。何卒宜しくお願い申し 上げます。