[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:47 / Filesize : 258 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合 その25



1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .net]
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その24
peace.2ch.net/test/read.cgi/unix/1415634843/

766 名前:739 mailto:sage [2016/09/10(土) 17:00:28.25 .net]
言葉足らずで、お騒がせしました。
やりたかったのは、テキスト中のurlの抽出です。

urlには/が入っていて、ドメイン名にはアルファベット、数字、ピリオドがあるので、
いろいろ試しているなかで、上のようなコマンドでgrepが機能しない?と思い込んだ状態に遭遇した所でした。
https+://をgrepから外したのは、ttp://やドメイン名から始まるurl対策のつもりでした。

自分の間違いを>>749の解説と>>747のイグザンプルで理解できました。
みなさん、ありがとうございました。

本来の目的はまだ試行錯誤中ですが。

767 名前:739 mailto:sage [2016/09/10(土) 17:16:44.65 .net]
https+じゃなくてhttps?でした

768 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 14:31:43.86 .net]
<<<を使うとechoで変数を渡すより速いというのを見かけて
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( echo ${x} | sed -Ee s'/b.*//g' ) ; done
time for i in $( seq -w 1 1000 ) ; do x="abcdefgh" ; y=$( sed -Ee s'/b.*//g' <<< ${x} ) ; done
を試したら、<<<の方が1割ほど遅かった。環境:macosx1095+sandy
みんなはどう?

769 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/14(水) 20:50:13.24 .net]
CentOS6.8(Hyper-V上)/Haswell でも前者の方が早いですね。
time を bash 添付の物ではなく、/usr/bin/time -v /bin/bash -c '...' で計測して詳細をみると、
前者は File system outputs: の値が 0 に対して、後者は 8000 (for の繰り返し1回あたり 8 増える)
となりました。

strace で見る限りどこかに書き込んでいるようには見えないですが、内部での実装に違いが
あるようですね。

770 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 09:05:23.94 .net]
想像だけど、echoはbashのビルトインだから起動ロスが無いのとパイプは同時起動だから、stdinが常に準備状態
<<<だど読み込むときにstdinを準備
じゃないのか?

771 名前:名無しさん@お腹いっぱい。 [2016/09/15(木) 11:53:03.00 .net]
<<<(ヒアストリング)ってbashのドキュメントにはビアドキュメントの変形と書かれてる
ってことは、fstat(0, ...)で調べりゃ、レギュラーファイルになってる筈

> <<<を使うとechoで変数を渡すより速いというのを見かけて
と言うデマの火元はどこ?

772 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 13:09:35.23 .net]
前者はサブシェルを起動するからプロセッサが繁忙状態だと多分遅くなる
シングルコア/シングルプロセッサだと確実にヒアストリングの後者の方が速い

773 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/15(木) 19:15:16.79 .net]
>>756, >>757, >>758
解説d
ヒアストリングという言葉自体初めて知りました。
<<はヒアドキュメントということも知らずに使っていました。
環境によっては、<<<は速くなるんですね。
いい勉強になりました。

774 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:27:52.80 .net]
ちょい困り案件が自己解決したのでココに書いておきます。
Macのファイルシステムって、ファイル名を UTF-8 で保存してるかと思いきや
独自の正規化がされてまして (UTF8-MAC) 例えば、
 find . -name "*ドイツ*"
とかやってもあるはずのファイルが出てこないわけです。(内部的に ド の字を ト+[濁点] みたいな格納をしてるせいです)
そこで .bash_profile に以下のように コマンドもどきの find2 を定義してやります。これで万事解決です。

# find に渡す引数を全て UTF8-MAC に変換してしてます
find2(){
eval "find "$(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}



775 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:38:10.62 .net]
>>760
他文字コードにも応用できそうだね

776 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 18:47:05.28 .net]
変換すべきは-name ... だけでしょ 全部変換は手抜きすぎ
-execで他のプログラムに渡すUTF-8をUTF8-MACに変換されていやーんになる
汎用的にするなら要ブラッシュアップ

777 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 21:51:49.29 .net]
>>762 了解です。
ただ -exec の方は 問題は別にあって
終端を表す \; の \(バックスラッシュ)
が消えちゃうんですね。そもそもiconv変換する前の時点で。

一応対応できたと思うんですが、
長くなったので貼るのはやめときます。

778 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:10:40.49 .net]
-execは;じゃ無くて+で終端しないと原人扱いされちゃうよ
;じゃないと困るのはかなり特殊なケース

779 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 22:13:36.64 .net]
>>760
どっかで読んだ内容だなぁと思ったら、これ↓のパクリか!
「新・OS X ハッキング! (169) Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策 | マイナビニュース」
 news.mynavi.jp/column/osxhack/169/index.html

780 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 23:20:43.06 .net]
やり方だけ覚えてたんですが、昔見たのはソレかもしれません。
ただ現実に必要になってみると
find . -name `echo "オランダ.png" | iconv -f UTF8 -t UTF8-MAC`
これ毎回打ち込むの面倒だなと思ってコマンド化してみた次第です。

781 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/24(土) 23:54:36.90 .net]
昔って、先月の25日(1ヶ月前)の記事だけどな

782 名前:名無しさん@お腹いっぱい。 [2016/09/24(土) 23:56:11.17 .net]
実におもしろいw

783 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/25(日) 00:01:20.09 .net]
ん、もっと昔から知ってたよ。だから他の記事だと思います。

784 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/25(日) 02:09:32.85 .net]
>>763
>>終端を表す \; の \(バックスラッシュ) が消えちゃうんですね。

普通にfindするときもfindに渡る前に¥は消えるでしょ

find2(){
find $(echo "$@" | iconv -f UTF-8 -t UTF8-MAC)
}

じゃダメなの?



785 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/26(月) 14:04:28.33 .net]
それがベストだと思います

786 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/09/26(月) 23:31:45.32 .net]
昔から知ってたけどね

787 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:27:03.83 .net]
以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると
ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、
これを「find /tmp -name

788 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:36:38.42 .net]
すみません、失敗しました。

以下のスクリプトはカレントディレクトリに「AABB」というファイルがあると
ワイルドカードが展開されて「find /tmp -name AABB」となってしまいますが、
これを「find /tmp -name "AA*"」とさせるにはどうすればいいのでしょうか?

#!/bin/sh
name="AA*"
option="-name $name"
find /tmp $option
---------------------------
$ ls
AABB test.sh

$ ls /tmp
AACC

$ sh -x test.sh
+ name=AA*
+ option=-name AA*
+ find /tmp -name AABB

/tmp/AACC をヒットさせたくて
下のように変数の書き方を色々変えてみましたが、うまくいかず
悩んでます。
name="AA"*""
name="AA\*"
name="AA\"*\""
option="-name "${name}""
option="-name \${name}"

789 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 10:45:33.83 .net]
option=

790 名前:名無しさん@お腹いっぱい。 [2016/10/16(日) 10:53:11.25 .net]
あれ、ダブルクォーテーションで切れちゃった
全角にするけど
option=”-name \”$name\””
とすればよろし

791 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 11:06:04.27 .net]
ダブルクォーテーション
ウェブブラウザで書いてて、書き込んでいいですかの確認画面を経由して書き込むと切れちゃう
俺調べ

792 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 13:48:12.77 .net]
余計な変数使わないで
#!/bin/sh
name="AA*"
find /tmp -name "$name"
ってやればいいのに

793 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 13:54:36.43 .net]
場合によって
option="$option 他のオプション"
とかやりたいんじゃないの

794 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 17:25:04.68 .net]
>>777
まさにそれだったわ。情報ありがとう



795 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 18:08:50.16 .net]
邪道で、bash 用だけど find の前に set -f
find の検索パスにワイルドカード使ってたらだめ

796 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:22:23.01 .net]
テス
# name=

797 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:25:37.68 .net]
>>777、あぁ、本当だWebブラウザからの書き込みだと回避できないのかな?
スクリプトソース貼るのに致命的だな

798 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/16(日) 19:40:18.84 .net]
hastebinにでも貼ればいいんだよ

799 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/26(水) 22:58:52.49 .net]
一般的なペーストビン

800 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/26(水) 23:40:35.70 .net]
hastebinのほうがちょっと見やすかったりする

801 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:05:55.08 .net]
実行中の標準出力と標準エラーをログしながら表示させることって出来る?
むかしリダイレクトとtailでやったらうまく行かなかった覚えがあってやめた気がする

802 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 21:22:36.46 .net]
プロセス置換を使う
cmd > >(tee stdout.log) 2> >(tee stderr.log)

803 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/29(土) 22:19:49.67 .net]
そういえばPOSIX shにはないな…すまん

804 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 09:23:07.74 .net]
cmd > stdout.log 2> stderr.log & tail -f stdout.log stderr.log
で出来ないか?



805 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/10/30(日) 21:41:34.72 .net]
下記でOKだった

{ { cmd | tee stdout.log 1>&3; } 2>&1 | tee stderr.log 1>&2; } 3>&1

・bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita
 qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc

806 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:24:35.95 .net]
音楽CDを突っ込んでmp3を作る。
この時ファイル名とmp3タグにはCDDBから読み込んで来る。

これをやるのに手っ取り早い方法ってなんだろ

807 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:26:20.17 .net]
EAC自動化

808 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/04(金) 12:31:52.74 .net]
abcde使えよ

809 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 04:52:04.55 .net]
/usr/bin/test を使った判定がよくわからなくて困ってます

curl でhttp の応答をチェックしたいのですが
下記みたいにしてもちゃんと判定できないのですが何が原因でしょうか?

test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?

810 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:02:01.01 .net]
くおー

$ [ $(curl -I localhost/ 2>&- | head -n 1) = 'HTTP/1.1 200 OK' ]; echo $?
bash: [: too many arguments
2
$ [ "$(curl -I localhost/ 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $?
0
$ [ "$(curl -I localhost/dummy 2>&- | head -n 1)" = 'HTTP/1.1 200 OK' ]; echo $?
1

っとちょっと色々違うけど、うちでは之でなんとかなってる

811 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 06:27:40.74 .net]
"HTTP/1.1 200 OK"$'\r'

812 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:38:26.65 .net]
そういうのはステータスコードだけを見るようにしたほうがいいよ

test "$(curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/)" = 200

HTTPステータス行の Reason-Phrase ("OK" や "Not Found" の部分) は送出者が自由に書けるし
HTTPバージョンも当然固定じゃない

# HTTP2を有効にしてビルドしたcurlの場合:
$ curl -I -s https://www.google.co.jp/ | head -n 1
HTTP/2 200
$

813 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 08:49:14.72 .net]
>>798
訂正
ウェブブラウザで表示すると余分なセミコロンが混じってしまう

test "$( curl -I -s -o /dev/null -w '%{http_code}' https://www.google.co.jp/ )" = 200

814 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:19:57.15 .net]
>>521
いいお(´・ω・`)



815 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:21:26.17 .net]
うちのcurlは終了しなかった
-XHEAD を外してみた
-bash: test: too many argumentsになった
$()を""で括った
awkが効いてなさそう
NR==1 にした
まだ一致しない
行末がCRLFだった
$'\r'を付けた

とりあえず
test $(curl -XHEAD -s -i https://www.google.co.jp | awk NR=1) = 'HTTP/1.1 200 OK';echo $?
はこう
test "$(curl -s -i https://www.google.co.jp | awk NR==1)" = 'HTTP/1.1 200 OK'$'\r';echo $?
なった

816 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 12:47:25.00 .net]
つまり纏めるとこうか
test "$(curl -I -w "%{http_code}" example.com/ 2>&- |tail -1)" = 200; echo $?

817 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 14:56:39.30 .net]
なんでレスポンスを取得する操作と
取得したレスポンスをtestする操作を一度にしようとするのか理解不能

818 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 16:51:11.77 .net]
ワンライナー原理教の方ですかね?w

まあ何でも一度にやってみたくなる衝動は理解できなくもない。
そこに山があるから、的な何か。

819 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/11/17(木) 17:02:47.58 .net]
そこにパイプがあるからな

820 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 08:00:32.91 .net]
品位が問われるAdvent Calendar -- シェルスクリプトはどこでも動く!
ttp://www.peeep.us/4a5535c5

なんかあの界隈よく揉めてるな… 👀
Rock54: Caution(BBR-MD5:f4da0c707200fe35c49b788174082785)


821 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 09:27:19.82 .net]
品位のないやつだな

822 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 10:58:10.89 .net]
qiitaとかに書いちゃう輩なんてそんなもんだろ

823 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 12:13:29.28 .net]
この記事がキモいのは認めるけど、十把一絡げにQiitaを悪く言うのはやめて!

とはいうもののオタクのコミュニティって、どこでもちんぽ騎士団ぽいのがいるよね……
ぼっち最高やで。

824 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 15:49:11.13 .net]
シェルスクリプトで、if



825 名前:とthenの間に改行がある場合で、その間に#をつけたコメント行を入れるのはNGですか?

ifの条件を、動作テストのため、いくつか使い分けたくて、thenより上の行で、テストで使い終わった判定を
コメント化しました。実際の判定が、コメント化したものが活かされたりと、おかしくなりました。

以下の、1分ごとに呼び出されるコードで、毎時40分だけ動いて貰いたいのに、10分おきに条件成立となりました。

#1hour
if [ `date '+%M'` -eq "40" ]
#10min
# if [ `date '+%M' | tail -c 2` -eq 0 ]
#all
# if [ true ]
then
echo 処理
fi
[]
[ここ壊れてます]

826 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:18:47.23 .net]
>>809
あそこで役に立つ記事あるか?
自己満のゴミ情報が大部分だからgoogole personal blockの対象だわ

827 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 16:49:19.73 .net]
>>810 テストの大括弧の後ろにセミコロン付ければいいんでね?

828 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 18:34:13.86 ID:v2ZV9RF7w]
bash3.2+ で IFS=$' \t\n' な状態で

$ echo "foo bar" baz | hoge.bash

とした時に hoge.bash 内で "foo bar" と baz を
別々の引数として取得するにはどうすればいいですか?

829 名前:名無しさん@お腹いっぱい。 [2016/12/07(水) 19:49:58.99 .net]
>>811
わかる。盛大な勘違い書いててドャァしてる感がすごい

830 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 21:31:23.08 .net]
googoleとかのことか

831 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/07(水) 23:23:03.71 .net]
>>810
素直にcrontab使った方が良いんじゃね

832 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/08(木) 09:58:48.36 .net]
>>810
そんなこと起きないはず
ほんとにそのコード?

833 名前:名無しさん@お腹いっぱい。 [2016/12/10(土) 20:22:24.90 .net]
すいません、教えて下さい。
色んなネットーワーク機器のログをsedでズバッとマスキングかけたいんだけど、URLと、IPアドレスの正規表現を教えて下さい。

834 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/10(土) 20:25:17.66 .net]
817d



835 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/14(水) 16:17:30.58 .net]
TBS

det dritte folkemn

836 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 04:35:52.23 .net]
文字列から実行して、返り値も標準出力も格納したいんだけど

testCmd="なんかのコマンド"
result=$(eval testCmd)

この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが

837 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 05:11:40.55 .net]
>>821

$0 ってどういうこと?
$? の間違いなら man bash の eval に書いてある。

838 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:35:22.65 .net]
普通に考えるなら

export testCmd="コマンド"
$testCmd > ログファイル
戻り値=$?

839 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 06:47:35.19 .net]
ちなみにスクリプトにすると
result=`$testCmd`
で標準出力が入って
$?でも戻り値は取れるけど
標準エラー出力は取れないね

840 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/21(水) 11:34:52.01 .net]
失礼いたしました$?ですね

testCmd="なんかのコマンド"
result=$(eval $testCmd)

returncode=$?

標準エラーはいらんのですが
プロセス置換?とかでできるのかな

841 名前:名無しさん@お腹いっぱい。 mailto:sage [2016/12/22(木) 09:27:10.08 .net]
いまいち何を訊きたいのか分からん。
$?はevalの終了ステータスが設定される。evalの終了ステータスはtestCmdの終了ステータスが設定される

842 名前:名無しさん@お腹いっぱい。 [2016/12/22(木) 12:40:53.01 .net]
> この後の$0はevalの返り値なのかtestCmdの帰りなのかよくわからんのですが

マニュアル読んでわかんなきゃ試してどうなるか調べないと
正常終了するコマンドだけじゃなくてそれ以外もね

843 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 17:41:24.20 .net]
[ .... ] を [[ .... ]]に単純に置き換えて問題あります
でしょうか?

844 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/15(日) 18:20:34.24 .net]
コマンドの引数を変数化したときって、どうやってその変数をコマンドに渡せばいいの?

#!/bin/bash
opts=“-f $file”
hoge $opts

これだと hogeコマンドが unrecognized option エラーになってしまう。
初歩的な質問ですまん



845 名前:828 mailto:sage [2017/01/15(日) 18:27:02.19 .net]
スマソ、自己解決
$fileが不正だっただけやん

846 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/16(月) 21:28:07.13 .net]
>>828
mywiki.wooledge.org/Bashism#Conditionals
> [[ is not defined by POSIX, originated in ksh and is also present in zsh

847 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:34:40.69 .net]
bashでif使って変数に"ok"が入ってるかはどうやって確かめればいいんでしょうか?
if [ $a = "ok" ]; then
echo hoge
else
echo fuga
fi
の様にしているのですが"ok"が入っていても別の文字列が入っていてもfugaが出力されてしまいます

848 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 21:59:37.47 .net]
$a の中身が引用符の無い裸の
ok
ならば真になるはず

849 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:02:25.13 .net]
できればそのままやりたいんです
cutかなんかで事前に削るしかないですかね?

850 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/17(火) 22:14:16.11 .net]
831 の "ok" を '"ok"' または "\"ok\"" にすれば

851 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 09:13:18.95 .net]
引用符付きの文字列なの?

852 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/18(水) 11:40:24.29 .net]
>>835
\"でうまく行きました
ありがとうございます
>>836
そうです
"ok"か"error"、またはそれ以外の文字列(引用符なし)が入ってる

853 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 12:38:14.00 .net]
使ってないと何もかも忘れる・・

854 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 16:06:57.66 .net]
忘れるで思い出した、シェルスクリプトと関係ないけどinfoでいつも迷子になるわ俺



855 名前:. mailto:sage [2017/01/21(土) 20:26:15.12 .net]
これってどうかな?
gihyo.jp/magazine/wdpress/plus/978-4-7741-8694-8

856 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/21(土) 21:16:52.05 .net]
configure全部読めば桶

857 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:25:46.35 .net]
httpdのログでIP直でアクセスして来たIPをbanするスクリプト作ってcronで回すようにした

858 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:40:12.97 .net]
接続しに来た全IPをBAN判定する負荷のほうが高くなりそうだね

859 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/01/23(月) 23:46:44.50 .net]
blockはpfでやってるけど、負荷があるのかわからない。たいして無いように思う。前は中国IPを全部はじいてたけど、特に不都合はなかった

860 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:07:27.34 .net]
ビギナーなんですが、教えてくれませんか。
for i in {1..3}
do
echo $i
done

1
2
3
ではなく{1..3}が出力されます。どうして?

861 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 17:13:16.91 .net]
bash じゃないから

862 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 17:15:56.58 .net]
>>846
ありがとう・・・ありがとう・・・

863 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 19:26:02.43 .net]
もう一個お願いします。
testを
1
2
3
というファイルだとして、
cat test|while read line; do sed -e "s/.*/a/"; done
をやると
a
a
a
ではなく
a
a
となるのはなぜですか?

864 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/05(日) 20:04:29.97 .net]
ホントは、

cat test|while read line; do echo "$line" | sed -e 's/.*/a/'; done

ってしたいんじゃない?

cat test|while read line; do sed -e "s/.*/a/"; done

だと、1行目を read が喰って、2行目以降は全て sed に入力される
ことになるよ。



865 名前:名無しさん@お腹いっぱい。 [2017/02/05(日) 20:26:43.25 .net]
>>849
ありがとう・・・。そういう仕組みになってるのは知らなかった。

866 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/02/08(水) 13:58:57.76 .net]
list.txt に書いてあるファイルを一括で転送するスクリプトを書いたのですが、
これに送信前と送信後のmd5を比較して、一致しなかったら再送させるにはどうすればいいですか?
pastebin.com/aXucBuHW






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef