TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
SUSE Linux Part 32
(´-`).。oO(なんでだろ? Part4)
【Linux】カーネル総合7【Kernel】
【2画面ファイラ】 mfiler4 その2
Manjaro Linux Part3
Linux上でのフォント総合スレ 5
OPENBOX part 1
【時事】生越昌己についてあなたの意見ください 11
どうしてLinuxには素晴らしい2ch専ブラが無いのか?
【Linux】カーネル総合7【Kernel】

Bashでプログラミング


1 :2015/10/04 〜 最終レス :2020/02/09
Bash - GNU Project - Free Software Foundation
https://www.gnu.org/software/bash/

2 :
bashはUnixシェルです。
bashを使ったシェルスクリプティングテクニックや
プログラミングについて和気あいあいとそしてほのぼのと語り合いたいと
思ってこのスレを建てました。よろしくお願いいたします。

3 :
シェルスクリプトクソめんどくせぇ。
どこでも動くように作る必要があるものだから
仕方なく作ってるけど、パスにスペースが入ったらとか、
くそめんどくせぇ

4 :
もうスクリプトはpythonでよくね?
Bashが動くような環境ならpythonがほぼ間違いなく動くから、制限だらけのBashで書く理由が思いつかない。

5 :
>>3
ピラフも昔はシェル間の互換性とかに気を配ってたよね。
でもある日悟ったんだよね、超めんどくせえと。
それ以来bashで動けばなんでも良いって思うようになった。
パスにスペースが入ることにも目をつぶるようになった。めでたしめでたし。

6 :
>>4
pythonいいよねpython。
一貫性があってシンプルでわかりやすい。
黒魔術perlとは違うよね。
コマンドを実行するだけとか、他のプログラムをキックするだけとか
そういうのだったらシェルスクリプトでいいんだけど、構造化が
必要なほどのプログラムになるときつい。

7 :
ノウハウが好きな人にはbashはたまらないと思うんだよね
垂涎ものだよ、たとえバッドでも。バッドでも!

8 :
パスにスペースが入ってるとパスが引数として解釈されたり、
最悪の場合、脆弱性につながりそうで怖いんだが。

9 :
>>7
> たとえバッドでも。バッドでも!

[ コマンドの存在が、一番のバッドだけどなw

10 :
>>8
わかる。-とかもだよね。これオプションじゃないのよー!みたいな。
シェルを広く公開するならそういうのにも対応しといたがいいのだろうけど、
内輪で使うならまあないっしょ大丈夫っしょ問題ないっしょ!と念じて目をつぶって地蔵の
ふりをするのもありだと思うよ。

11 :
>>9
マジで!?ピラフそのコマンド使ったことない。ちょっと調べてみる。

12 :
> そのコマンド使ったことない。

ナイスジョーク

13 :
[はtestコマンドだったのか。てっきりbashのsyntaxだとばかり思ってた。

14 :
>>12
播(゚∀゚d)ォゥィェ!!

15 :
[ "$var" = "test" ]

意味

コマンド名 ・・・ [
第一引数 ・・・ "$var"
第二引数 ・・・ =
第三引数 ・・・ "test"
第四引数 ・・・ ]

考えてみよう!

[ "$var" = "test"] なぜ "test" と ] の間のスペースをなくすとエラーになるのか?
[ $var = "test" ] なぜ 変数名を "" で括るのが一般的なのか?

16 :
>>15
おもしろい、考えてみる!

17 :
なぜ他の言語のように

if [$var="test] then
fi

とシンプルにかけないのか?

[ コマンドを考えついた奴は、俺頭いい!って思っちゃったんだろうな。
そのせいでシェルスクリプトの構文を改善する機会がなくなった。

シェルスクリプトは変数への代入はできるが変数の参照はできない。
できるのは変数の中身の文字列展開だけ。

それがパスにスペースが有る場合の問題にまで影響してるのさ。

くっそ言語、くっそ言語、

18 :
しょーもないことをドヤ顔で語ってるな

19 :
>>18
このスレに書き込まずにはいられなかったんなら
お前も参加しろよw

20 :
>>18
みんなでここをいいドヤ顔スレにしよう(提案(前向き(全力(社畜

21 :
どうしてピラフはわざわざ、プログラム板から、
Linux板にまで出てきたのですか?


皆で、オブジェクト指向のPowerShellへ、移行しませう。
他には、VBScript, JScript もあるし

.NETの世界は、極楽ですぜw

22 :
これがあるんだからスレ立てるじゃねえの糞が

シェルスクリプト総合 その25(c)2ch.sc
http://peace.2ch.sc/test/read.cgi/unix/1439563321/

23 :
>>22
糞じゃない、ピラフだ。
UnixってFreeBSDとかそういうのじゃないの?
ピラフLinux使ってるの。だからスレ建てたの。許して。

24 :
>>21
VBScriptはピラフが一番好きなプログラム言語だよ。
いいよねーあれ。Linuxでも使えたら良いのにって毎日思ってるよ。
Linux環境で動く.NET Coreが発表されて.NETはますます勢いを増しそうだよね。
PowerShellと.NET Coreはピラフも興味を持っています。今後ともよろしくお願いいたします。

25 :
ピラフさあ、困ってることがあって
標準出力と標準エラー出力を同じファイルに書き出して、
かつ、標準エラー出力のみを画面に出力したいんだよね。
そのやり方がどうしてもわからなくて教えて欲しいんです。
教えてください、おねがいします。

26 :
SNSじゃねぇんだから、>>22のスレに移動しろよ。

27 :
>>26
>>22はUnix板だよ。
アメリカの議会で税金を話し合ってるときに
中国の税金はどうとか言うのは場違いだよね。
ピラフはUnix使ってないし。ここがSNSじゃないとも思ってないし。
>>22には移動しないし。

28 :
おのれは誰やねん

29 :
>>28
お前が誰だ。なんだペンギンて。なめてんのか。

30 :
vipq2が高ければこのスレ落とすんだけどなぁ
無念

31 :
>>30
どうしてそんな酷いことするの?
ピラフのこと嫌いなの?

32 :
ピラフは旨い

33 :
>>25
tee を使えば、画面とファイルに、同時に出力できる

34 :
teeコマンドとはpeeという単語をもじって作られた単語

peeとはおしっこ(をする)という意味で
(ファイルに書きだしたものが画面に)漏れる
という所から来ている。

35 :
>>3
"C:\Program Files" とかくくるだけやん

>>17
変数の参照ってどういう意味だ?

>>24
VBSやPowerShellは1GBくらいの巨大なテキストのログを
調べようとしたら、1GBのオブジェクト作ってメモリ関係のエラーが出て
ワロタよ

Unixの小さいメモリで動くコマンドをパイプでつなげる方がいいわ
DOS・NTコマンドもUnix思想だから、PowerShellやVBSをあきらめて
NTコマンドをパイプでつないでなんとか解決したけどさ。

いちいちオブジェクト作るとか大げさだわ

36 :
>>33
やろうとしたいことちゃんと読んだ?
( echo 1; echo 2>&2; echo 3>1; echo 4>&2)
みたいなコマンドから

1
2
3
4

の出力と

1
3

の出力を分離したいって意味だと思ったんだが

37 :
>>36
cronで頑張るわけでも無いだろうし、管理出来ていないものを無理くりやって保守できなくなる未来しか見えない。筋が悪いのでアホでも管理できるよう、KISSがいいね。

38 :
bashを極めたいんだがなんかいいサイトないか?

39 :
>>38
http://www.amazon.co.jp/b?node=2221117051

40 :
>>39
         ____
        /      \
       /  ─    ─\
     /    ⌒  ⌒  \     ハハッ超ワロス 笑い死ぬわ
     |       ,ノ(、_, )ヽ    |
      \      トェェェイ   /
       /   _ ヽニソ,  く

41 :
>>34
変態

42 :
>>33
teeって標準出力を受け取るじゃん。
標準エラー出力のみを画面に出力するとともに
標準出力と標準エラー出力を同じファイルに出力したい。
とても難しい。とてもわからない。とても教えてほしい。

>>36
そうなんよ。わからないんよ。教えてほしいんよ。お願いするんよ。

43 :
>>37
ヽ(○´ε`○)ノぶちゅ

44 :
>>35
んなアホな。VBScriptはできる子だよ。ピラフが証明してみせるよ。

45 :
% cat test.sh
( echo 1; echo 2 >&2; echo 3; echo 4 >&2 )

% : > log; stdbuf -oL -eL bash test.sh 2>>log | tee -a log
1
3

% cat log
2
1
3
4

stdout と stderr との同期とれてないのが、、うーん

46 :
標準出力はバッファリングされて、
ある程度データがたまってから出力されるが、

標準エラーは重要度が高いため、
バッファリングされずに、即画面に出力される

>>3
ファイル名には、半角英数字と「_」アンダーバーだけを、
使った方がよい。外人の作るアプリでは、
日本語などは考慮されていないことが多いから

Mac用に、PowerShellでファイル名の、
半角スペースをアンダーバーに変換する、
プログラムを書いたりした

47 :
>>46
> 外人の作るアプリでは、
> 日本語などは考慮されていないことが多いから

えっとな、俺日本人。
今は俺(=日本人)が作るアプリの話してる。

48 :
それからスペースは日本語じゃない。

半角英数字と「_」アンダーバーだけを使った方がよい理由が、
日本語を考慮してないからというのは、理屈がおかしい

49 :
>>43
簡単なものは簡単なままにしておけクソ野郎

50 :
bashは何日でマスターできる?

51 :
UNIX シェルスクリプト・コマンドブック 第3版
山下哲典、2015

Software Design 2014/1
にも、シェルの特集が40ページ分、載っている

まあ、1〜2週間あれば、そこそこ出来る

ただ、exportを付けないシェル変数は、
同一プロセス内でのみ有効で、
下記のサブシェルのような、別のプロセスには引き継がれない

` ` または、$( ) によるコマンド置換
( ) によるグルーピング
パイプ・リダイレクト

シェル変数を、別のスクリプトでも使いたいのなら、
. または、source コマンドで、
スクリプトをカレントシェル上に呼び出すと、
同一プロセス内での実行となる

sh スクリプト名 → 別のプロセス(子プロセス)
. スクリプト名 → 同一プロセス

52 :
シュエルスクリプトの関数にするか、
それとも外部プログラムにするか、
どっちがいい?

53 :
>>52
動くならどっちでもいい。直感的にわかりやすい。コードの見通しが良くなる方が望ましい。

54 :
GTK+のプログラミングマスターした人いる?
紙資料で3.5cmの厚みなんだ。
為になるよ。

55 :
>>27
bashはOSに依存しないし、該当スレはbashなりzshなり使用するシェルをきちんと申告すれば対応してくれる
それ以上に理由がない限りスレを立てる意味がない

56 :
なぜbashなのに拡張子を.shにするのか

57 :
拡張子は飾りです
お好きなようにどうぞ

58 :
>>55
UNIX板はUNIXに依存してるでしょうが。
女性専用の老人ホームに若くてピチピチの可愛いギャルが
入居するようなものだよ。女に変わりはないだろうけども
不適切だよね。老人じゃないし、可愛いし、ピチピチだし。
場を弁えるってそういうことだと思う。若い人が新たにコミュニティを作る
ことには意味があると思うし、ピラフは梯子(テコ)でも動かない!

59 :
というスピリッツで単発スレ立てする人は自分が満足すると埋め立ての責任を持たず放置する傾向にあるんだよな。
ちゃんと1000まで話題を提供してくれるの?(´・ω・`)

60 :
>>59
みんなでここを良いスレにしようよ。
ピラフだけでは無理。みんなで力を合わせようよ。

61 :
全員がピラフになれば、ピラフだけでもヤれる

62 :
>>60
あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?

63 :
>>62
表示したいのはエラー出力やし人格否定するほどではないな


$ cat test.sh
#!/bin/sh
echo 1; echo 2 >&2; echo 3; echo 4 >&2

$ ( ./test.sh >> log ) 2>&1 | tee -a log
2
4

$ cat log
1
2
3
4

保証はせーへんけどな

64 :
>>62
> あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?

ですよね。お礼は三行。常識です。

65 :
もう>>59が言ってる状態に入りかけてる

66 :
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。

67 :
bashで30ファイル、計1500行ぐらいの
大作ツール作ったぜw

68 :
解説付きうpplz

69 :
pythonなら1桁落ちるわけですね?

70 :
ないわーw

71 :
>>65
ピラフもうネタ切れだからさ、なんか話題あったら書き込んで。
遠慮しなくていいから。みんなでここをいいスレにしようよ!

72 :
変数の宣言について
たとえば、こういうプログラムを書いたとき
pilafは9回表示されるかと思いきや3回しか表示されない。
fun_testでfun_mainのiを読み書きしてしまうから。
だから、変数はローカル変数で宣言する必要がある。

#!/bin/bash

fun_test() {
 i=1
 while (( i <= 3 )); do
  echo pilaf
  (( i++ ))
 done
}

fun_main() {
 i=1
 while (( i <= 3 )); do
  fun_test
  (( i++ ))
 done
}

fun_main

73 :
以下のコードは何も表示されない。

#!/bin/bash

echo "hello" | while read msg; do
 var=$msg
done

echo $var

74 :
パイプを使っているから、
その部分がサブシェル(子プロセス)になっていて、

そこで宣言した変数varが、
カレントシェル(親プロセス)に持ち出せない

どういう解決策があったっけ?
export を付ければよいのか?

>>51
に書いておいた

75 :
echo -ne "hello\nworld" | while read msg; do echo $msg ;done

うっかりしてると最後の行を処理し損ねる

76 :
こう書き換えるだけでいいよ

while read msg; do
 var=$msg
done < <(echo "hello")

77 :
さて、ではこれはどう表示されるでしょうか?

#!/bin/bash

i=0

while read msg; do
echo "A $msg"
((i+=3))
done < <(while read msg; do
echo "B $msg"
((i+=2))
done < <(echo "hello"))

echo $i

78 :
http://pero2.cocolog-nifty.com/

79 :
変数の宣言と同時に値を代入を行うと
コマンド置換を使うときにリターンコードを取得できない

fun_getValue() {
 return 1
}

fun_main() {
 declare value=$(fun_getValue)
 echo $?
}

fun_main

上のプログラムは0を出力する

declare value
value=$(fun_getValue)

必然的にこういう形を取ることになる
VBScriptみたい

80 :
間接参照はこうすればいいみたいだけどさ、

var=123
ref="var"
echo "${!ref}" # 123

間接代入はどうすればいいの?
一応evalつかってできたけど、これしかない?

eval "$ref"=456

81 :
だまってPHPとかC言語とか使えや。
反論不要。だまって使え。
所詮bashはシェルだよ。
プログラミング言語として使おうとしなくていい。

82 :
(まともな)コーディング規約ってないかな?

83 :
[[ $a = $b ]]

$a はただの文字列として扱われるが、$b はパターンマッチング処理されることに注意

単なる文字列比較をしたい場合は
[[ $a = "$b" ]] または [[ "$a" = "$b" ]]


なお、[ ] と違って [[ ]] は $a を "" で囲む必要はない。

84 :
>>83
echoもそうだよね。
いい感じのエラーログを出力しようとしたらファイル丸出し。

a="*** ERROR ***"
echo $a

85 :
echo には -e という文字列を出力できないという問題があるので
完ぺきを求めるなら、printf "%s\n" "$text" とした方がいい。

なお、echo も printf も それぞれ /bin/echo、/usr/bin/printf という
バイナリがあるが、bash も sh も zsh もシェルビルトイン関数である。

86 :
>>85
マジか!?マジでか!!
echo難儀なコマンドだね

87 :
echo -e \\0055e

88 :
あー、うん、せやね。

-eだけじゃなくて-nもだめだし-eneもだめ
さて$aに任意の文字が入っている時、それをechoで問題なく出力するにはどうするか?

もちろん、$aに \e[33m のような文字列が入っていることがあるが、
printf "%s\n" $a と同じようにそのまま出力するというのが条件。

とまで書かないといかんよね。

89 :
bashでは知らないけどzshでは
echo e- |rev
とすると表示できたよ。

90 :
a="-e"
echo "$a" |rev

zshでも表示されねーじゃねーかwww

91 :
echo $'\0'$a

92 :
いや、その条件ならa='e-'にしてrevするべきだろ。

93 :
条件は $a に -e が入っている場合なんですが?

もちろん $a には-e だけじゃなくて、-n や -ene や
e-が入っていることもあります。

94 :
>>91

a="ab"

$ echo -n $a | wc -c
2

$ echo -n $'\0'$a | wc -c
3


1文字増えちゃってますよ?

95 :
そんな偉そうに言われてもな。89にたいする90の解答って..

96 :
そりゃ増えるよ。見たまんま増やしてるのだから。

97 :
? ネタ回答はいらんって話だよ。

98 :
Bashでツールを作ったんですけど、ここで紹介するのありですか?
ソースコードはかなりまじめに書いています。
ドキュメントと仕上げでもう少しだけ時間が掛かりそうですけど。

99 :
>>98
      ┓┏
     (^ω^) アリだっ!
   ┌.ゝ .ノ┐
    ┌'、_丿┐
    ┛   ┗

100 :
つ 穴を塞ぐ


100〜のスレッドの続きを読む
Kona Linux 4杯
動画・音声関係ソフトウェア総合 8
【UTM】統合脅威管理スレ
オススメLinuxディストリビューションは? Part74
オプソ開発にお勧め フル機能のVisualStudoが無料に
CD/USB】PuppyLinux - 19匹め - 【軽量】
日立スレッド
【Bash】Windows Subsystem for Linux【WSL】7
【Raspberry Pi】ラズベリーおっパイ π28【ARM】
ノートPCでLinux 7
--------------------
【アルバム発売?】ジョン・サイクス【Defcon19】
【はいふり】ハイスクール・フリート 162隻目
【イライラ倍増】信長の野望online1748【九州ノック】
Hottoほっともっとその90 Motto
バックレてしまった人達
■■速報@ゲーハー板 ver.47953■■
竹書房は本当にもつのか[がんばれ老舗]
○放射線★健康医療ソース記事
俺のゾイド軍団で仮想敵に勝つ【アイデア募集】
韓非子について語るスレ2
【京アニ】京都アニメーションのスタジオで放火、33人の死亡確認 36人けが ガソリンまいた男の身柄を確保 ★53
ホラー総合スレッド 2
【総務省・通信】携帯料金の4割引き下げは日本経済にメリットがなさそうな理由 ★2
K-POP初心者なんやが教えてくれ
うんこしたら流せよ
自慢のキリムについてオオイに語って下さい
◆視聴率情報提供専用スレ3365◆
【臭い】綾瀬はるかはワキガでスソガ【酸っぱい】
久留米大学附設高等学校・中学校 Part14
【国民】玉木代表、少子化対策として3人目を出産した家庭に1000万円を給付 「コドモノミクス」と名付け野党と結集(衆香川2区)★5
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼