• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Linux制御文)

Linux制御文についての質問

このQ&Aのポイント
  • Linux制御文について質問があります。3ヶ月目の初心者です。
  • スクリプトの中でファイルを入力する方法がわかりません。
  • ファイルの出力先を指定する方法を教えてください。

質問者が選んだベストアンサー

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

「ファイルができて」とありますが、ここにあるスクリプトは標準出力(設定してなければ、画面)に出力されるものです。 ファイルに出力するようになっていません。 ファイル名を設定するような箇所も見当りません。 ファイル名が決ってるとか、法則性があるとか、自分で入力する、とかなら(↑ここにファイルを入れたい)ってところに、そのファイル名をいれればいいのですが、それがわからないので、対応のしようがありません。

yamihousi
質問者

お礼

回答ありがとうございます 申し訳ないです(;´Д`) 詳しい文章を作り直して、再度質問致しますので よろしければ回答を願いますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4852/10266)
回答No.2

そのままパイプでつなげばいい。 if [ $1 = 1 ];then echo A,a1,OK echo A,a2,OK echo B,b1,OK echo B,b2OK elif [ $1 = 2 ];then A,a1,OK A,a2,NG B,b1,OK B,b2,NG elif [ $1 = 3 ];then A,a1,NG A,a2,NG B,b1,NG B,b2,NG fi | sort | cut -d, -f1 | uniq -c

yamihousi
質問者

お礼

回答ありがとうございます(=^0^=) 参考にさせていただきます

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

$1にファイルを指定したら cat $1 ...ってことではなさそうですね。 前半との繋りもわかりません。 なにがしたいんですか? 前半をa.shとすると ./a.sh 1 で A,a1,OK A,a2,OK B,b1,OK B,b2OK と出力されますよね?これを sort | cut -d ,-f1 | uniq -c したいのなら ./a.sh 1 | sort | cut -d ,-f1 | uniq -c ですが

yamihousi
質問者

補足

解りにくくて申し訳ないです つまり./a/sh 1を実行すると テキストファイルができて、その中身が A,a1,OK A,a2,OK B,b1,OK B,b2,OK なんです そこでできたテキストファイルを、 sort | cut -d ,-f1 | uniq -c 文に入れたいのです・・・ 本当に解りにくい文章で申し訳ないです

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • linux 制御文2

    Linuxを使い始めて3ヶ月目のど素人です 前に、質問したのですが 文章が解りにくかったので再度、書き直して質問です 何卒、宜しくお願いします ↓a.shの中身 if [ $1 = 1 ]; then echo "A,a1,OK" echo "A,a2,OK" echo "B,b1,OK" echo "B,b2,OK" elif [ $1 = 2 ]; then echo "A,a1,OK" echo "A,a2,NG" echo "B,b1,OK" echo "B,b2,NG" elif [ $1 = 2 ]; then echo "A,a1,NG" echo "A,a2,NG" echo "B,b1,NG" echo "B,b2,NG" 部分説明 A・Bをドメイン a1・a2・b1・b2をドメイングループ OK・NGをステータス と表現します 質問部分(スクリプト作成) 1、a.shを実行し結果を「monitor.log」に格納 2、1で出力したファイルをユニークなドメイン数をカウントする 3、2でカウントした数だけループ処理を実行する 3-1、対象のドメインに対するドメイングループ数をカウント 3-2、対象のドメインに対する、グループ「OK」の数をカウントする 3-3、3-1と3-2の数を以下判定する 例 ケース(1)[3-1] = [3-2] ケース(2)[3-1] > [3-2] ケース(3)[3-1] = 0 (1)(2)(3)それぞれの出力結果をhoge.logに出力する 3-4、3-3でケース(1)か(2)だった場合、ドメイン復旧(ステータス)か判定する (直前に実行したファイルmonitor.logのステータスと比較する) 復旧している場合、ログ出力する 長文で申し訳ありませんが、困ってます どなたか救いの手を!

  • linux制御文3

    もう自分の中途半端な処理は、書きません まる投げして、申し訳ないですが何方か回答お願いします I/O IN 各ドメインのドメイングループが停止していないか確認する OUT 停止しているドメイングループをログ出力する 全停止している場合は、ドメイン停止ログを出力する 「機能概要」 ドメインステータスの死活監視を行います ドメインステータス確認コマンドを実行{今回このコマンドは、存在しない為デバッグを作る} 各ドメイン内に起動中のドメイングループが存在していることを確認します 全てのドメイングループが停止しているドメインについては、その旨をログ出力します また停止しているドメイングループが存在した場合、その旨をログに出力します 停止中のドメインをリストで管理し停止状態から復旧状態に 回復した場合もその、旨をログ出力します。 部分説明 【項目】         【説明】 ドメイン         デバッグ内のAとB ドメイングループ   デバッグ内のa1,a2,b1,b2 ステータス       デバッグ内のOK(起動中)NG(停止中)  デバッグ        a.sh 「出力例」 A,a1,OK A,a1,OK [デバッグ]a.shの中身 if [ $1 = 1 ]; then #ドメイングループ全てOKのケース echo "A,a1,OK" echo "A,a2,OK" echo "B,b1,OK" echo "B,b2,OK" elif [ $1 = 2 ]; then   #一部ドメイングループが停止中のケース  echo "A,a1,OK" echo "A,a2,NG" echo "B,b1,OK" echo "B,b2,NG" elif [ $1 = 2 ]; then   #全てドメイングループが停止中のケース echo "A,a1,NG" echo "A,a2,NG" echo "B,b1,NG" echo "B,b2,NG" fi > hoge.log 「NGログ例」 [ERROR] A,a1 steatas NG 「グループメンバー全NGログ例」 [ERROR] Domain A steatus NG 「復旧ログ例」 Restoration Domain B,b1 I/Oどうりで、動いてくれれば処理内容はなんでも、OKです 唯一できれば、やめてほしいのが ”awk”コマンドの使用です すいません、まだ使い方がよくわからないのです メンドくさい場合は、使っても大丈夫です・・・ できればです・・・できれば・・・ 何卒宜しくお願いします

  • Linuxについて

    Linuxのスクリプトについて Linuxのスクリプトについての質問です #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done という引数に応じてカレンダーを出力するスクリプトを作成しました。 このスクリプトは引数が2つの場合は、1年ごとのカレンダーが表示されます。 ここに、引数が2つより少ないときはエラーメッセージを出力してプログラムを終了する機能をつけたいのですが 方法がよくわかりません。 #!/bin/bash # 実行時に指定された引数の数、つまり変数 $# の値が 3 でなければエラー終了。 if [ $# -ne 3 ]; then echo "指定された引数は$#個です。" 1>&2 echo "実行するには3個の引数が必要です。" 1>&2 exit 1 fi # ヒアドキュメントでメッセージを表示する。 cat <<__EOT__ 指定された引数は、 $1 $2 $3 の$#個です。 __EOT__ exit 0 このスクリプトをなんとか応用すればできると思うのですが なにせ初心者なもので;; ちょっと複雑になるとすぐに頭が混乱してしまう所存です・・・ どなたかご親切な方のご回答をお待ちしています。

  • if文がうまくできません;;

    こんにちわ。 当方、linux初心者です。 今if文を作っているのですが、どうしてもうまくいきません。 ●lsで出力した結果が何行出力されたかによって回答が変わるシェルを作成してください。(10以上と9~3と2以下の3種類) という例題を解答中ですが、下記のとおり作ったのですが 何かアドバイスは頂けませんか? お願い致します。 #!/bin/bash ls -l > case.txt P=`cat case.txt | wc -l` if $P -ge 10 then echo '10以上' elif $P -ge 3 ; then echo '3以上' elif $P -le 2 ; then echo '2以下' fi

  • シェルスクリプトで引数をファイル名に使うには?

    シェルスクリプトでutfとshift-jisの変換を行いたいと思ってます。 ファイル出力のところでファイル名を$1と引数にするとうまくいきません。(変換されてなかったり、空ファイルできたり) >! $1 ではなく $1.xx とかにするとうまくいきます。 どうしたら引数のファイル名に出力できるでしょうか? #!/bin/sh if [ $2 = 'us' ] then cp $1 $1.utf8 iconv -f UTF-8 -t SHIFT-JIS $1 >! $1 echo "$1 UTF-8 => SHIFT-JIS [ OK ]" elif [ $2 = 'su' ] then cp -f $1 $1.sjis iconv -f SHIFT-JIS -t UTF-8 $1 >! $1 echo "$1 SHIFT-JIS => UTF-8 [ OK ]" else echo "$1をコンバートできませんでした。" fi

  • UNIX

    UNIXの課題をやっていて、ここまで出来たのですが???の部分が 分かりません;誰か教えて頂けると助かります; 時間があれば説明も加えて頂けたら幸いです; #!/bin/bash #ふたつの引数の大小を判断し表示するシェルスクリプト if [ $# -lt 2 ] then echo "引数が足りません" exit fi cmp1=$1 cmp2=$2 if [ $cmp1 -gt $cmp2 ] then echo "$cmp1 ??? $cmp2" elif [ $cmp1 ??? $cmp2 ] then echo "$cmp1 = $cmp2" else echo "$cmp1 ??? $cmp2" fi

  • ファイルの編集方法

    シェルスクリプトでファイルの中身の特定バイトを切り出し、その前に文字列を付加してファイルへ出力するにはどうしたらよいでしょうか? ↓こんなイメージにしたいのですが cat input.dat | cut -b1-5 | sort | uniq | echo "abc"$1

  • シェルスクリプト(if文)

    bashにてシェルスクリプトを作成しています。 XXXX_111122222333_YYYYMMDD 111122222333 といった2パターンのファイル名から、「111122222333」の部分を取得したいのですが、if文の条件式で悩んでいます。 if [ expr length ${p9} -gt 13 ] then a=`echo $p9|cut -c 6-9` b=`echo $p9|cut -c 10-14` c=`echo $p9|cut -c 15-18` else a=`echo $p9|cut -c 1-4` b=`echo $p9|cut -c 5-9` c=`echo $p9|cut -c 10-13` fi これで実行すると too many arguments というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。

  • UNIX teeコマンドについて

    あるテストプログラムの実行結果をteeコマンドで、ログに追加出力しようとしています 以下の1.変更前の様にシェルスクリプトを作成しました。 このシェルスクリプトを実行するとteeコマンドが正常終了するので $? が常に0になってしまい、必ずOKになってしまいます 急いでいたので2.のように修正したのですが、テンプファイルを使わないでもうちょっとシンプルに作成する方法をご存知の方教えてください 1.変更前 ./testpgm | tee -a logfile.txt  if [ $? -eq 0 ] ; then  echo "OK,testpgm," | tee -a logfile.txt else echo "NG,testpgm," | tee -a logfile.txt fi 2.変更後 ./testpgm > tempfile.txt if [ $? -eq 0 ] ; then cat tempfile.txt>>logfile.txt cat tempfile.txt echo "OK,testpgm," | tee -a logfile.txt else cat tempfile.txt>>logfile.txt cat tempfile.txt echo "NG,testpgm," | tee -a logfile.txt fi rm tempfile.txt OSはAIXで、シェルはshのみ使用可です

  • Linuxのbashシェルスクリプトについて教えて下さい。

     Linux, bash超初心者です。  WindowsのAdobe Readerで印刷できないPDFを印刷しようと、Vine Linux上でpdf2psとps2pdfを組み合わせ、以下のようなスクリプトを作ってみました。 [pdfconv.sh] ----- #!/bin/sh if [$1 = ""]; then echo "Usage: ./pdfconv.sh input.pdf [output.pdf]" else file1=$1 file2=${file1%pdf}ps if [$2 != ""]; then file3=$2 else file3=${file1%.pdf}2.ps fi echo $file1' -> '$file3 pdf2ps -r1200x1200 ${file1} ps2pdf $file2 $file3 rm $file2 fi -----  引数が渡されていないとUsageを表示するようにしてみたのですが、引数を渡して $ ./pdfconv.sh test.pdf として実行すると、 ./pdfconv.sh: line 3: [test.pdf: command not found とのエラーが表示されてしまいます。処理自体には問題ないのですが、何だか気持ち悪いです。解決策を教えていただけますでしょうか。よろしくお願いします。