たっぴ(パソコン質問掲示板)

ログイン

メニュー
■ トップ
■ 質問する
■ 回答を見る・回答する
■ 参加者のひろば / テーマ別
■ コミュニケーション道場
■ 「たっぴ」の使い方
■ 「たっぴ」のルール・心得

エキスパート トータルランキング
Rank ニックネーム E-Point
1 位 sriver 1372 p
2 位 げんき(^^)/ 810 p
3 位 うにゅ 607 p
4 位 mory 512 p
5 位 saru 510 p
6 位 Clark 481 p
7 位 taknt 474 p
8 位 459 p
9 位 あき◆ 387 p
10 位 おやぢ 366 p
※月間ランキング参加者がありませんでした。



E-Point還元プログラム
E-Point 月間獲得ポイントより回答者様へ現金を還元いたします。

対象還元金額
全員に(E-Point)×20円
支払いは5,000円以上からとなります。
還元金の支払いはご指定銀行口座への振込みとなります。

『マナーの良い質問者』マーク
以下の条件を満たす質問者様には
  『マナーの良い質問者』マーク

が付きます。
  1. 登録していて
  2. 「終了」していない質問がひとつ以下で
  3. 終了した質問で「○○○○○」という言葉の投稿がある
3番目の条件はひらがなです。もうお判りですね。(漢字、カタカナもOKかも。。。)
ぜひマークをGetしてください。









《戻る

No.質問・回答おれい
[114241] コマンドについての質問
使用しているOS: Linux
bash シェルについて。

コマンドを打つ時に cat テキストファイル名 | シェルファイル > テキストファイル名(例:cat ex.txt | ./sample_shell.sh > /tmp/out.txt)とする場合、シェルファイルの中で、テキストファイル(例ではex.txt)をどのように指定すればいいかわかりません。理解している方教えて下さい。お願いします。
shell (未登録)   2009年4月15日14:02


[114242] sample_shell.sh の標準入力になります。sample_shell.sh の中で標準入力として受けてください。
シャイン (30)    2009年4月15日17:00


[114245] 御回答ありがとうございます。しかし、私はシェル初心者なのでまだよく理解できていません。例えば、実行する時に ./sample_shell.sh ex.txt out.txt とすると ex.txt と out.txt は sample_shell.sh の中でそれぞれ$1、$2という形として扱うことができますが、cat ex.txt | sample_shell.sh > /tmp/out.txt とする場合 sample_shell.sh の中ではどのように表現すればよいのでしょうか。
shell (未登録)   2009年4月15日20:57


[114250] cat ex.txt | sample_shell.sh とすると、sample_shell.sh は cat ex.txt の出力、すなわち ex.txt の中身を標準入力に受け取ります。


シェルスクリプトの中に標準入力を受け取るコマンドを書くと、シェルスクリプトの標準入力を受け取ります。

例えば、sample1.sh を次のようにすると、abc を含む行のみを出力します。
----------------------------
grep abc
----------------------------
cat ex.txt | ./sample1.sh とすると、cat ex.txt | grep abc と同じで、ex.txt の中で abc を含む行を出力します。


read コマンドは標準入力を読み、変数に代入します。
例えば、sample2.sh を次のようにすると、標準入力の1行目のみ表示します。
----------------------------
read line
echo $line
----------------------------

例えば、sample3.sh を次のようにすると、標準入力を一行ずつ変数に代入できます。
----------------------------
while read line; do
    echo $line
done
----------------------------


シャイン (30)    2009年4月15日22:48


[114281] 毎度ご解答ありがとうございます。

例えば、ex.txtの行頭が#記号である行以外を/tmp/out.txtに出力するsample_shell.shを

#!/bin/sh

while read LINE
do
case $LINE in

"#"*) ;;

*)echo $LINE >> $2 ;;
esac
done < $1

と作成すると、実行時に cat ex.txt | sample_shell.sh > /tmp/out.txt では $1: ambiguous redirect となって動きません。この時に sample_shell.sh 内でどのようにすればいいのでしょうか。

shell (未登録)   2009年4月17日12:55


[114287] この場合、$1、$2 はいりません。
#!/bin/sh

while read LINE
do
  case $LINE in
    "#"*) ;;
    *)echo $LINE ;;
  esac
done
cat ex.txt | sample_shell.sh > /tmp/out.txt としたとき、sample_shell.sh には引数が指定されていないので、シェルスクリプトの中で $1、$2 は空(から)です。

|(パイプ)、>(リダイレクト)を使うときは、標準入力、標準出力の概念を理解してください。

普通の実行方法では、標準入力はキーボード、標準出力は画面です。sample_shell.sh だけを実行すると、入力待ちになり、キーボードから打ち込んでエンターを押すと画面に出力されます。Ctrl+d で入力終了です。

標準入力、標準出力は、入力・出力先を実行時に切り替えられるすばらしいアイデアです。|(パイプ)は前のコマンドの標準出力を後ろのコマンドの標準入力に送る実行方法です。>(出力リダイレクト)は標準出力をファイルに保存します。ついでに、<(入力リダイレクト)はファイルの内容を標準入力へ入力します。

シャイン (30)    2009年4月17日21:50


[114302] 素人である私にとって大変理解しやすい説明でした。ありがとうございました。プログラム内容も理解することができ、次へ活かせる勉強となりました。お世話になりました。
shell (未登録)   2009年4月19日12:23


( 参照数:13169   日平均:2.4 )
 
〜 回答の受付を終了しました 〜


回答、お礼・報告などメッセージの追加

ニックネーム:

まったく新しい内容の質問、質問者以外の方の質問は、メニューの「質問する」から新たに質問してください。

詳細: 内容を詳しく言うと。。。

※「たっぴ」に登録すると質問にポイントが付けられます。 その他便利な機能も使えます!》新規登録 》Help

※http://.....は自動的にハイパーリンクに変換します。
※<pre></pre>が使用できます。     ※引用は行の先頭に「>」を付けてください。自動的に色が付きます。




利用規約 特定商取引に関する法律に基づく表記 プライバシーポリシー 問合せ