Bashでプログラミング [転載禁止]©2ch.net (264レス)
1-

47: 2015/10/06(火)04:44 ID:NURn7XIT(1/2) AAS
>>46
> 外人の作るアプリでは、
> 日本語などは考慮されていないことが多いから

えっとな、俺日本人。
今は俺(=日本人)が作るアプリの話してる。
48: 2015/10/06(火)04:47 ID:NURn7XIT(2/2) AAS
それからスペースは日本語じゃない。

半角英数字と「_」アンダーバーだけを使った方がよい理由が、
日本語を考慮してないからというのは、理屈がおかしい
49: 2015/10/06(火)12:44 ID:4T4D9m2w(1) AAS
>>43
簡単なものは簡単なままにしておけクソ野郎
50: 2015/10/06(火)12:55 ID:IpqxO3tA(1) AAS
bashは何日でマスターできる?
51
(1): 2015/10/07(水)07:32 ID:GQwM5Yjq(1) AAS
UNIX シェルスクリプト・コマンドブック 第3版
山下哲典、2015

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

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

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

` ` または、$( ) によるコマンド置換
( ) によるグルーピング
省7
52
(1): 2015/10/07(水)10:29 ID:M6NB5j5s(1) AAS
シュエルスクリプトの関数にするか、
それとも外部プログラムにするか、
どっちがいい?
53: 2015/10/07(水)12:55 ID:8ottO0ep(1) AAS
>>52
動くならどっちでもいい。直感的にわかりやすい。コードの見通しが良くなる方が望ましい。
54: 2015/10/07(水)19:58 ID:RV6ZvwXQ(1) AAS
GTK+のプログラミングマスターした人いる?
紙資料で3.5cmの厚みなんだ。
為になるよ。
55
(1): 2015/10/08(木)09:11 ID:WEInxm9o(1) AAS
>>27
bashはOSに依存しないし、該当スレはbashなりzshなり使用するシェルをきちんと申告すれば対応してくれる
それ以上に理由がない限りスレを立てる意味がない
56: 2015/10/08(木)20:48 ID:lgr3Fqt0(1) AAS
なぜbashなのに拡張子を.shにするのか
57: 2015/10/08(木)22:09 ID:zqGOFpq7(1) AAS
拡張子は飾りです
お好きなようにどうぞ
58: ピラフ 2015/10/08(木)22:25 ID:HskmnVPN(1/2) AAS
>>55
UNIX板はUNIXに依存してるでしょうが。
女性専用の老人ホームに若くてピチピチの可愛いギャルが
入居するようなものだよ。女に変わりはないだろうけども
不適切だよね。老人じゃないし、可愛いし、ピチピチだし。
場を弁えるってそういうことだと思う。若い人が新たにコミュニティを作る
ことには意味があると思うし、ピラフは梯子(テコ)でも動かない!
59
(2): 2015/10/08(木)23:29 ID:UuNzaExB(1) AAS
というスピリッツで単発スレ立てする人は自分が満足すると埋め立ての責任を持たず放置する傾向にあるんだよな。
ちゃんと1000まで話題を提供してくれるの?(´・ω・`)
60
(1): ピラフ 2015/10/08(木)23:40 ID:HskmnVPN(2/2) AAS
>>59
みんなでここを良いスレにしようよ。
ピラフだけでは無理。みんなで力を合わせようよ。
61: ピラフ 2015/10/09(金)02:29 ID:apuZirFb(1) AAS
全員がピラフになれば、ピラフだけでもヤれる
62
(2): 2015/10/09(金)23:04 ID:3VAz+DjZ(1) AAS
>>60
あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?
63: ダメな奴は何をやっても©2ch.net [agete] 2015/10/14(水)05:54 ID:VsqQS5me(1) AAS
>>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
省4
64: 2015/10/14(水)06:28 ID:v4uCjH3b(1) AAS
>>62
> あのさ、>>45 に対して礼のひとつも言わないのは人としてまずくない?

ですよね。お礼は三行。常識です。
65
(1): 2015/10/17(土)11:28 ID:tB03pcpd(1) AAS
もう>>59が言ってる状態に入りかけてる
66: 2015/10/22(木)23:02 ID:hLzbOUmG(1) AAS
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
67: 2015/11/05(木)02:04 ID:70mAwyHg(1) AAS
bashで30ファイル、計1500行ぐらいの
大作ツール作ったぜw
68: 2015/11/05(木)07:56 ID:y6/bEwWc(1) AAS
解説付きうpplz
69: 2015/11/07(土)02:29 ID:M5pvVJO6(1) AAS
pythonなら1桁落ちるわけですね?
70: 2015/11/07(土)09:27 ID:XsE55U3y(1) AAS
ないわーw
71: ピラフ ◆9Jro6YFwm650 2015/11/09(月)00:31 ID:uu5Sv9eW(1/2) AAS
>>65
ピラフもうネタ切れだからさ、なんか話題あったら書き込んで。
遠慮しなくていいから。みんなでここをいいスレにしようよ!
72
(1): ピラフ ◆9Jro6YFwm650 2015/11/09(月)00:39 ID:uu5Sv9eW(2/2) AAS
変数の宣言について
たとえば、こういうプログラムを書いたとき
pilafは9回表示されるかと思いきや3回しか表示されない。
fun_testでfun_mainのiを読み書きしてしまうから。
だから、変数はローカル変数で宣言する必要がある。

#!/bin/bash

fun_test() {
 i=1
 while (( i <= 3 )); do
  echo pilaf
省11
73: 2015/11/09(月)02:21 ID:vvdpTyUy(1/2) AAS
以下のコードは何も表示されない。

#!/bin/bash

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

echo $var
74: 2015/11/09(月)03:17 ID:glvAAiJJ(1) AAS
パイプを使っているから、
その部分がサブシェル(子プロセス)になっていて、

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

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

>>51
に書いておいた
75: 2015/11/09(月)03:34 ID:sW5M/AJB(1) AAS
echo -ne "hello\nworld" | while read msg; do echo $msg ;done

うっかりしてると最後の行を処理し損ねる
76
(1): 2015/11/09(月)03:41 ID:vvdpTyUy(2/2) AAS
こう書き換えるだけでいいよ

while read msg; do
 var=$msg
done < <(echo "hello")
77: 76 2015/11/09(月)11:14 ID:9zOZIa4h(1) AAS
さて、ではこれはどう表示されるでしょうか?

#!/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"))
省1
78: 2015/11/10(火)09:33 ID:DpgyD2JB(1) AAS
外部リンク:pero2.cocolog-nifty.com
79: ピラフ ◆9Jro6YFwm650 2015/11/17(火)23:05 ID:cJiBRV26(1) AAS
変数の宣言と同時に値を代入を行うと
コマンド置換を使うときにリターンコードを取得できない

fun_getValue() {
 return 1
}

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

fun_main
省5
80: 2015/11/19(木)09:42 ID:Jjkt5i+K(1) AAS
間接参照はこうすればいいみたいだけどさ、

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

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

eval "$ref"=456
81: 2015/11/19(木)22:36 ID:3iQoIwnP(1) AAS
だまってPHPとかC言語とか使えや。
反論不要。だまって使え。
所詮bashはシェルだよ。
プログラミング言語として使おうとしなくていい。
82: 2015/11/20(金)06:03 ID:oqxoCWjH(1) AAS
(まともな)コーディング規約ってないかな?
83
(2): 2015/11/20(金)17:45 ID:UgnIOuo6(1) AAS
[[ $a = $b ]]

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

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

なお、[ ] と違って [[ ]] は $a を "" で囲む必要はない。
84: ピラフ ◆9Jro6YFwm650 2015/11/23(月)11:07 ID:e6CiHMu0(1/2) AAS
>>83
echoもそうだよね。
いい感じのエラーログを出力しようとしたらファイル丸出し。

a="*** ERROR ***"
echo $a
85
(1): 2015/11/23(月)12:24 ID:rfqyRG3i(1) AAS
echo には -e という文字列を出力できないという問題があるので
完ぺきを求めるなら、printf "%s\n" "$text" とした方がいい。

なお、echo も printf も それぞれ /bin/echo、/usr/bin/printf という
バイナリがあるが、bash も sh も zsh もシェルビルトイン関数である。
86: ピラフ ◆9Jro6YFwm650 2015/11/23(月)14:03 ID:e6CiHMu0(2/2) AAS
>>85
マジか!?マジでか!!
echo難儀なコマンドだね
87: 2015/11/23(月)17:17 ID:HMW3Nv9o(1) AAS
echo -e \\0055e
88
(1): 2015/11/23(月)17:25 ID:m+EccjTy(1) AAS
あー、うん、せやね。

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

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

とまで書かないといかんよね。
89: 2015/11/24(火)10:07 ID:xf2Nfg3B(1/5) AAS
bashでは知らないけどzshでは
echo e- |rev
とすると表示できたよ。
90: 2015/11/24(火)14:55 ID:jlJmLfSH(1/4) AAS
a="-e"
echo "$a" |rev

zshでも表示されねーじゃねーかwww
91
(1): 2015/11/24(火)15:25 ID:xf2Nfg3B(2/5) AAS
echo $'\0'$a
92: 2015/11/24(火)15:35 ID:xf2Nfg3B(3/5) AAS
いや、その条件ならa='e-'にしてrevするべきだろ。
93: 2015/11/24(火)15:38 ID:jlJmLfSH(2/4) AAS
条件は $a に -e が入っている場合なんですが?

もちろん $a には-e だけじゃなくて、-n や -ene や
e-が入っていることもあります。
94: 2015/11/24(火)15:44 ID:jlJmLfSH(3/4) AAS
>>91

a="ab"

$ echo -n $a | wc -c
2

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

1文字増えちゃってますよ?
95: 2015/11/24(火)15:46 ID:xf2Nfg3B(4/5) AAS
そんな偉そうに言われてもな。89にたいする90の解答って..
96: 2015/11/24(火)15:46 ID:xf2Nfg3B(5/5) AAS
そりゃ増えるよ。見たまんま増やしてるのだから。
97: 2015/11/24(火)16:11 ID:jlJmLfSH(4/4) AAS
? ネタ回答はいらんって話だよ。
98
(1): 2015/11/24(火)23:41 ID:zPMHS13p(1) AAS
Bashでツールを作ったんですけど、ここで紹介するのありですか?
ソースコードはかなりまじめに書いています。
ドキュメントと仕上げでもう少しだけ時間が掛かりそうですけど。
99
(1): ピラフ ◆9Jro6YFwm650 2015/11/24(火)23:51 ID:uXBTKSJE(1) AAS
AA省
100: 2015/11/25(水)00:23 ID:ndEs85Cz(1) AAS
つ 穴を塞ぐ
101: 2015/11/25(水)00:43 ID:cNzVYyHb(1) AAS
>>99
じゃあ、終わったら連絡しますね。
102
(1): 2015/11/25(水)15:14 ID:zaXwxH/w(1/2) AAS
>>72
> while (( i <= 3 )); do
>  echo pilaf
>  (( i++ ))
> done

((i++)) 【let i=++】と
((i+=1)) 【let i=i+1】と
i=$((i+1)) は
厳密には違う。

i=0; ((i++)); echo $? => 1
省7
103: 2015/11/25(水)15:20 ID:zaXwxH/w(2/2) AAS
よく見たらこの例はiが1から始まってるから大丈夫か。
104: ピラフ ◆9Jro6YFwm650 2015/11/25(水)23:57 ID:qKKURXkV(1) AAS
>>102
((φ(・Д´・ *)ホォホォ 勉強になります!!
105: ピラフ ◆9Jro6YFwm650 2016/01/01(金)01:37 ID:OSOvSqc1(1/3) AAS
AA省
106
(1): ピラフ ◆9Jro6YFwm650 2016/01/01(金)01:42 ID:OSOvSqc1(2/3) AAS
曜日の定数を自動生成しちゃう

for i in $(seq 0 6); do
 date -d "$i days" "+%A %w"
done | sort -k 2 | sed -e "s/ /=/" | sed -e "s/^/readonly /"
107
(1): ピラフ ◆9Jro6YFwm650 2016/01/01(金)01:43 ID:OSOvSqc1(3/3) AAS
>>106
結果がこれ
readonly Sunday=0
readonly Monday=1
readonly Tuesday=2
readonly Wednesday=3
readonly Thursday=4
readonly Friday=5
readonly Saturday=6
108: 2016/01/05(火)14:14 ID:tOHAFEvw(1) AAS
>>107

可読性はタイプ数よりも大切だってことが
よく分かるねw
109: 2016/01/05(火)19:46 ID:btsG67QP(1) AAS
bash使うなら曜日名は配列に格納しておいて入ってくる引数を添字として使えばいいんでないの?
110: 2016/02/06(土)12:04 ID:yPG1W7x/(1/3) AAS
PATH の中に空の : があると、カレントディレクトリがコマンドサーチパスに含まれてしまいますが、
環境変数が空であった等の理由により、空の : (ex /usr/local/sbin::/usr/local/bin など)が
パスに含まれてしまうことはよくあります。
カレントディレクトリがコマンドサーチパスに含まれるのはセキュリティーホールになりかねないので、
PATHに空の : が含まれないようにしたいのですが、よい方法はないでしょうか?
111: 2016/02/06(土)15:12 ID:OQYFu5/W(1) AAS
よくあるなんてことはない
112: 2016/02/06(土)15:34 ID:ToE+zhkT(1/2) AAS
変数が空なら何も入れないようにすればいいじゃないですか?
113: 2016/02/06(土)15:37 ID:ToE+zhkT(2/2) AAS
そもそもPATHに使われる環境変数が空であることはありえないはずなんだがね。
普通PATHに使われる変数には、定数として決め打ちのパスが代入されているはず。

なぜならば、空が入る可能性があるということは、
空以外の任意の文字列が入るということだろう?
であれば、環境変数に "./" が入ることがあるかもしれないし
"/malware/" という値が入るかもしれない。

カレントディレクトリだけを不正だって意味は無い。
114: 2016/02/06(土)17:53 ID:yPG1W7x/(2/3) AAS
>空であることはありえないはずなんだがね。

そうなんですか、現在の環境じゃインストール後、マニュアル操作で PATH をいじっていないので、
そういうもんだと思っていたのですが、何か問題があるようですね。
どこでそうなってるいるか調べてみます。
115: 110,114 2016/02/06(土)20:27 ID:yPG1W7x/(3/3) AAS
わかりました。

<アプリ名>_HOME=<アプリのインストールパス> # この <アプリ名>_HOME は関連ツールから参照される
PATH=$PATH:<アプリ名>_HOME/bin

みたいな記述で、最初の 「<アプリ名>_HOME」 のスペルが間違っていました。
このアプリをすぐ使っていれば気づいたはずですが、インストールした後ほかが忙しくて
ほったらかしにしていたので気づかなかったというオチです。
どうもお騒がせしました。
116: 2016/02/09(火)22:51 ID:1eA4ku59(1) AAS
配列の代入(複製)というのはどうやればできるのでしょうか。
117
(2): 2016/03/08(火)14:41 ID:ZfpEki75(1/2) AAS
x='123'
y=`date +%m | sed 's/^0//' `
z= expr $y "*" 1000 + $x
cat k-m | sed 's/PPP/$z/'
で ファイル k-mのPPP値を3123に変えたいのですが
$zではだめです。
どうしたらいいでしょう。
118
(1): 2016/03/08(火)14:48 ID:B0X8XFR+(1/3) AAS
>>117
読むのだるいからさ?
問題ない所までは省いて
問題があるところだけ書けよ
119: 2016/03/08(火)15:49 ID:ZfpEki75(2/2) AAS
すまん

echo 'port=PPP' > test
cat test
x=2
sed 's/PPP/'"$x"'/' test
は問題ない。

長いファイルではダメなのかな?
120
(1): 2016/03/08(火)17:54 ID:B0X8XFR+(2/3) AAS
cat test の意味は?
必要最小限にしないからわからんのよ。
testの中身の文字もさ、限界ギリギリまで減らしてみて
121: 2016/03/08(火)17:55 ID:B0X8XFR+(3/3) AAS
修正

限界ギリギリまで減らした状態での
動く場合 と 動かない場合 の
2つのパターンを書いてみて
122: 2016/03/10(木)09:06 ID:gEv7eiQN(1/5) AAS
k1の内容が
media_dir=/home/foge/Downloads/
network_interface=eth0
port=PPP
serial=6810
で 、シェルクリプトが 
z=55555
sed 's/PPP/'
123: 2016/03/10(木)09:49 ID:gEv7eiQN(2/5) AAS
あれ 尻切れとんぼ
z=5555
sed 's/PPP/'"$z"'/' k1  の時はOK。
x='123'
y=`date +%m | sed 's/^0//' `
z= expr $y "*" 1000 + $x
echo $z
sed 's/PPP/'"$z"'/' k1 はだめ
124: 2016/03/10(木)09:57 ID:1kGddc4A(1) AAS
だからね。

動くやつはそれでいいよ。

動かない方、どこまで想定通りに動いているのか?
想定通りに動いているところは省略して、
想定通りに動いていない所だけ書いてって話をしてるんだよ。
125: 2016/03/10(木)10:56 ID:gEv7eiQN(3/5) AAS
了解
echo $z
で確かに$zには想定とおりの値がでてくる。
しかし sed 's/PPP/'"$z"'/' k1 はだめ。
'"$z"' がいけないと思う。 だが 分からない。
126: 2016/03/10(木)11:24 ID:gEv7eiQN(4/5) AAS
きたならしく 一応できた。   ./s4 `./s5` で。
k1 は既出。 minisldaのポートを安全改善のため毎月変えようと思って
cat s4
awk '{sub("PPP", "'$1'" ); print $0;}' k1

cat s5
x='10000'
y=`date +%m | sed 's/^0//' `
z= expr $y "*" 10 + $x
echo $z
127: 2016/03/10(木)11:56 ID:NdYWsqwM(1/2) AAS
それは echo ではなく expr が出力している。

z=`expr $y "*" 1000 + $x`
sed "s/PPP/$z/" k1

でいいんじゃないの? これでちゃんと動いたよ。
128: 2016/03/10(木)12:28 ID:gEv7eiQN(5/5) AAS
shellが違うんでしょうね、うちでは 下ではエラー expr: syntax error
z=`expr $y "*" 1000 + $x`
echo $z
使ってるのは OS :armbian で シェルは わからない
129: 2016/03/10(木)22:00 ID:NdYWsqwM(2/2) AAS
多分、勘違いしているのはここ。

z= expr $y "*" 10 + $x

これは一時的に環境を変更した上でコマンドを起動するための構文。
bash の man の 2520 行目辺りに書かれている。
この場合は環境変数 z に空文字列をセットして expr を起動する。
そして、それが終わったらもう z は存在しない。
だから echo では何も出力されない。
130: [sega] 2016/03/25(金)11:08 ID:BrsvjcQb(1/2) AAS
環境変数 $BASH_COMMAND で最後に実行したコマンドが取得できますが
ほんとに最後に実行したコマンドなので
ls | cat
みたいにしたときに当然ながら cat しか取れません

最後に実行したときのコマンドラインに打った文字列
を取得するにはどうしたらよいでしょうか
131
(1): 2016/03/25(金)11:21 ID:Wj6xxs6s(1) AAS
historyあたりで頑張るとか
132
(1): 2016/03/25(金)11:33 ID:BrsvjcQb(2/2) AAS
>>131
ありがとう
historyあたりで頑張ります
133: 2016/03/31(木)08:26 ID:gSxvuyP1(1) AAS
Windows10搭載ってまじかよ
134: 2016/03/31(木)12:19 ID:lhT3jASv(1) AAS
外部リンク:unix.oskp.net

XPとかなbashとかコンパイルしたら
動いたけど、バイナリ互換はすごいな
135
(1): 2016/04/01(金)10:00 ID:+PxKnYGY(1/2) AAS
curlでAPI叩いてるんだけど返事帰ってくるまでCreating..........みたいに....を増やしたい
どういうふうに書けばいい?
136: 2016/04/01(金)10:23 ID:2l1U0Mzg(1) AAS
>>135
別プロセスで実行して、そのプロセスが生きている間
. を増やし続ければいい
137: 2016/04/01(金)10:48 ID:+PxKnYGY(2/2) AAS
1秒ごとにチェックして生きてたら....を出力死んでたらそのままみたいなことか
やってみるわ
138: 2016/04/01(金)16:24 ID:YrmxN89w(1) AAS
windowsでbaプロできるようになるみたいですね(´・ω・`)
139: 2016/04/01(金)19:49 ID:opN9G6gR(1) AAS
HOGEDIR="${HOME}/path/to/directory" のように既存のディレクトリへのpathを変数に入れたら下記のような感じで実在チェックした方がいいんでしょうか?
自分は転ばぬ先の杖だと思って(事実、何度かtypoしてます)書くようにしていますが……

if test ! -d "$HOGEDIR"; then
    echo '$HOGEDIR is *NOT* a Directory!' 1>&2
    exit 1
fi
140
(1): 2016/04/01(金)20:48 ID:pqGjBE9F(1) AAS
変数に入れるかどうかは実在チェックの必要性に変化を与えるものではない
141: 2016/04/01(金)21:01 ID:FfS85Ldg(1) AAS
だがその実在性が極めて疑わしい性的な穴隙に変化を与えられた私はそれに入れる事を夢想し夢精するものである
142: 2016/04/02(土)12:51 ID:2K6xkzqa(1) AAS
セキュリティにも穴はあるんだよな・・・
143: 2016/05/09(月)14:51 ID:tGlvk2AC(1) AAS
exec 3>$1
みたいにファイルディスクリプタを指定するとき
すでに使われるディスクリプタ番号を避けたいんだけど
どうしたらいいの?
144: 2016/05/09(月)15:18 ID:1X5m9uCK(1) AAS
Bash詳説みたいな本ないかな?
やっぱオライリーか…
145
(1): 2016/05/10(火)04:31 ID:D4kfzW96(1) AAS
open とか、複製する dup でも、未使用のファイルディスクリプタを使う
146: 2016/05/22(日)16:49 ID:q7UTLg4q(1) AAS
SoftwareDesign 6月号、1,220円 + 税

特集、Bash 再入門・MySQL
1-
あと 118 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.020s