Bashでプログラミング

1 :ピラフ:2015/10/04(日) 00:11:42.24 ID:KQhWWZXy.net
Bash – GNU Project – Free Software Foundation
https://www.gnu.org/software/bash/

94 :login:Penguin:2015/11/24(火) 15:44:01.15 ID:jlJmLfSH.net

>>91

a=”ab”

$ echo -n $a | wc -c
2

$ echo -n $’¥0’$a | wc -c
3

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

117 :login:Penguin:2016/03/08(火) 14:41:04.49 ID:ZfpEki75.net

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ではだめです。
どうしたらいいでしょう。

90 :login:Penguin:2015/11/24(火) 14:55:58.31 ID:jlJmLfSH.net

a=”-e”
echo “$a” |rev

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

156 :login:Penguin:2017/11/08(水) 06:57:36.00 ID:N8l/Vn75.net

>>154
.

30 :login:Penguin:2015/10/04(日) 23:31:51.40 ID:jHPuSLta.net

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

155 :login:Penguin:2017/11/07(火) 14:24:33.56 ID:As8jAu29.net

>>154
汎用的に使う関数なら ‾/.bashrc に書いて
あとは普通に関数名で実行すればいいだけ
function foo {
}

ならfooで呼び出し。

115 :110,114:2016/02/06(土) 20:27:21.72 ID:yPG1W7x/.net

わかりました。

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

みたいな記述で、最初の 「<アプリ名>_HOME」 のスペルが間違っていました。
このアプリをすぐ使っていれば気づいたはずですが、インストールした後ほかが忙しくて
ほったらかしにしていたので気づかなかったというオチです。
どうもお騒がせしました。

128 :login:Penguin:2016/03/10(木) 12:28:00.31 ID:gEv7eiQN.net

shellが違うんでしょうね、うちでは 下ではエラー expr: syntax error
z=`expr $y “*” 1000 + $x`
echo $z
使ってるのは OS :armbian で シェルは わからない

127 :login:Penguin:2016/03/10(木) 11:56:18.43 ID:NdYWsqwM.net

それは echo ではなく expr が出力している。

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

でいいんじゃないの? これでちゃんと動いたよ。

136 :login:Penguin:2016/04/01(金) 10:23:48.01 ID:2l1U0Mzg.net

>>135
別プロセスで実行して、そのプロセスが生きている間
. を増やし続ければいい

112 :login:Penguin:2016/02/06(土) 15:34:21.77 ID:ToE+zhkT.net

変数が空なら何も入れないようにすればいいじゃないですか?

14 :ピラフ:2015/10/04(日) 04:25:01.42 ID:KQhWWZXy.net

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

12 :login:Penguin:2015/10/04(日) 04:21:31.28 ID:B+hGdmlE.net

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

ナイスジョーク

8 :login:Penguin:2015/10/04(日) 04:03:08.09 ID:B+hGdmlE.net

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

106 :ピラフ ◆9Jro6YFwm650 :2016/01/01(金) 01:42:34.66 ID:OSOvSqc1.net

曜日の定数を自動生成しちゃう

for i in $(seq 0 6); do
 date -d “$i days” “+%A %w”
done | sort -k 2 | sed -e “s/ /=/” | sed -e “s/^/readonly /”

43 :ピラフ:2015/10/05(月) 21:16:20.27 ID:GG5PCVx7.net

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

159 :login:Penguin:2018/05/22(火) 11:10:50.11 ID:Czl6p0FW.net

僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

FOJ8E

121 :login:Penguin:2016/03/08(火) 17:55:43.82 ID:B0X8XFR+.net

修正

限界ギリギリまで減らした状態での
動く場合 と 動かない場合 の
2つのパターンを書いてみて

122 :login:Penguin:2016/03/10(木) 09:06:25.61 ID:gEv7eiQN.net

k1の内容が
media_dir=/home/foge/Downloads/
network_interface=eth0
port=PPP
serial=6810
で 、シェルクリプトが 
z=55555
sed ‘s/PPP/’

88 :login:Penguin:2015/11/23(月) 17:25:37.43 ID:m+EccjTy.net

あー、うん、せやね。

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

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

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

29 :ピラフ:2015/10/04(日) 23:11:54.27 ID:KQhWWZXy.net

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

47 :login:Penguin:2015/10/06(火) 04:44:46.72 ID:NURn7XIT.net

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

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

113 :login:Penguin:2016/02/06(土) 15:37:43.31 ID:ToE+zhkT.net

そもそもPATHに使われる環境変数が空であることはありえないはずなんだがね。
普通PATHに使われる変数には、定数として決め打ちのパスが代入されているはず。

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

カレントディレクトリだけを不正だって意味は無い。

49 :login:Penguin:2015/10/06(火) 12:44:40.38 ID:4T4D9m2w.net

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

55 :login:Penguin:2015/10/08(木) 09:11:47.18 ID:WEInxm9o.net

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

130 :login:Penguin:2016/03/25(金) 11:08:22.48 ID:BrsvjcQb.net

環境変数 $BASH_COMMAND で最後に実行したコマンドが取得できますが
ほんとに最後に実行したコマンドなので
ls | cat
みたいにしたときに当然ながら cat しか取れません

最後に実行したときのコマンドラインに打った文字列
を取得するにはどうしたらよいでしょうか

37 :login:Penguin:2015/10/05(月) 20:15:00.17 ID:RFzaXW3t.net

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

82 :login:Penguin:2015/11/20(金) 06:03:03.13 ID:oqxoCWjH.net

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

118 :login:Penguin:2016/03/08(火) 14:48:48.74 ID:B0X8XFR+.net

>>117
読むのだるいからさ?
問題ない所までは省いて
問題があるところだけ書けよ

73 :login:Penguin:2015/11/09(月) 02:21:06.81 ID:vvdpTyUy.net

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

#!/bin/bash

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

echo $var

34 :login:Penguin:2015/10/05(月) 05:22:02.33 ID:krlerkMH.net

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

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

11 :ピラフ:2015/10/04(日) 04:18:35.71 ID:KQhWWZXy.net

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

116 :login:Penguin:2016/02/09(火) 22:51:43.16 ID:1eA4ku59.net

配列の代入(複製)というのはどうやればできるのでしょうか。

78 :login:Penguin:2015/11/10(火) 09:33:01.23 ID:DpgyD2JB.net

99 :ピラフ ◆9Jro6YFwm650 :2015/11/24(火) 23:51:49.15 ID:uXBTKSJE.net

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

72 :ピラフ ◆9Jro6YFwm650 :2015/11/09(月) 00:39:20.01 ID:uu5Sv9eW.net

変数の宣言について
たとえば、こういうプログラムを書いたとき
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

5 :ピラフ:2015/10/04(日) 03:50:20.09 ID:KQhWWZXy.net

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

142 :login:Penguin:2016/04/02(土) 12:51:53.29 ID:2K6xkzqa.net

セキュリティにも穴はあるんだよな・・・

100 :login:Penguin:2015/11/25(水) 00:23:32.51 ID:ndEs85Cz.net

つ 穴を塞ぐ

145 :login:Penguin:2016/05/10(火) 04:31:28.39 ID:D4kfzW96.net

open とか、複製する dup でも、未使用のファイルディスクリプタを使う

24 :ピラフ:2015/10/04(日) 13:09:32.23 ID:KQhWWZXy.net

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

96 :login:Penguin:2015/11/24(火) 15:46:57.54 ID:xf2Nfg3B.net

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

16 :ピラフ:2015/10/04(日) 04:34:56.30 ID:KQhWWZXy.net

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

123 :login:Penguin:2016/03/10(木) 09:49:42.62 ID:gEv7eiQN.net

あれ 尻切れとんぼ
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 はだめ

129 :login:Penguin:2016/03/10(木) 22:00:45.11 ID:NdYWsqwM.net

多分、勘違いしているのはここ。

z= expr $y “*” 10 + $x

これは一時的に環境を変更した上でコマンドを起動するための構文。
bash の man の 2520 行目辺りに書かれている。
この場合は環境変数 z に空文字列をセットして expr を起動する。
そして、それが終わったらもう z は存在しない。
だから echo では何も出力されない。

26 :login:Penguin:2015/10/04(日) 22:30:31.51 ID:cHujBtP3.net

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

75 :login:Penguin:2015/11/09(月) 03:34:11.12 ID:sW5M/AJB.net

echo -ne “hello¥nworld” | while read msg; do echo $msg ;done

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

45 :login:Penguin:2015/10/06(火) 00:31:46.32 ID:F1F9KS5h.net

% 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 との同期とれてないのが、、うーん

20 :ピラフ:2015/10/04(日) 05:33:56.23 ID:KQhWWZXy.net

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

102 :login:Penguin:2015/11/25(水) 15:14:14.21 ID:zaXwxH/w.net

>>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
i=0; ((i+=1)); echo $? => 0
i=0; i=$((i+1)); echo $? => 0

i=-1; ((i++)); echo $? => 0
i=-1; ((i+=1)); echo $? => 1
i=-1; i=$((i+1)); echo $? => 0

set -e をしていると、その場で終了してしまうことになる。
計算のみの用途として、安心して使えるのは i=$((i+1)) だ

102 :login:Penguin:2015/11/25(水) 15:14:14.21 ID:zaXwxH/w.net

>>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
i=0; ((i+=1)); echo $? => 0
i=0; i=$((i+1)); echo $? => 0

i=-1; ((i++)); echo $? => 0
i=-1; ((i+=1)); echo $? => 1
i=-1; i=$((i+1)); echo $? => 0

set -e をしていると、その場で終了してしまうことになる。
計算のみの用途として、安心して使えるのは i=$((i+1)) だ

101 :login:Penguin:2015/11/25(水) 00:43:00.55 ID:cNzVYyHb.net

>>99
じゃあ、終わったら連絡しますね。

38 :login:Penguin:2015/10/05(月) 20:21:23.73 ID:qJa6tBSz.net

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

79 :ピラフ ◆9Jro6YFwm650 :2015/11/17(火) 23:05:38.66 ID:cJiBRV26.net

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

fun_getValue() {
 return 1
}

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

fun_main

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

declare value
value=$(fun_getValue)

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

120 :login:Penguin:2016/03/08(火) 17:54:50.78 ID:B0X8XFR+.net

cat test の意味は?
必要最小限にしないからわからんのよ。
testの中身の文字もさ、限界ギリギリまで減らしてみて

19 :login:Penguin:2015/10/04(日) 05:14:24.14 ID:B+hGdmlE.net

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

70 :login:Penguin:2015/11/07(土) 09:27:51.85 ID:XsE55U3y.net

ないわーw

52 :login:Penguin:2015/10/07(水) 10:29:19.64 ID:M6NB5j5s.net

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

153 :login:Penguin:2016/09/08(木) 01:20:29.54 ID:4a9rtSBz.net

「linux 端末 色」で検索!

105 :ピラフ ◆9Jro6YFwm650 :2016/01/01(金) 01:37:32.67 ID:OSOvSqc1.net

       ○
 /⌒\ (__)
 \●/(__)/⌒\
   ∩ (・∀・ )\●/  あけおめ
   Y  ̄ ||y||  ̄`”φ
    Lノ /ニ|| ! ソ >
    乂/ノ ハ ヽー´
    `ー-、__|

33 :login:Penguin:2015/10/05(月) 02:41:11.48 ID:n5ifdXzm.net

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

39 :login:Penguin:2015/10/05(月) 21:09:18.28 ID:krlerkMH.net

4 :login:Penguin:2015/10/04(日) 03:41:56.50 ID:2ljDEtpK.net

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

27 :ピラフ:2015/10/04(日) 22:47:52.26 ID:KQhWWZXy.net

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

91 :login:Penguin:2015/11/24(火) 15:25:38.09 ID:xf2Nfg3B.net

echo $’¥0’$a

107 :ピラフ ◆9Jro6YFwm650 :2016/01/01(金) 01:43:48.83 ID:OSOvSqc1.net

>>106
結果がこれ
readonly Sunday=0
readonly Monday=1
readonly Tuesday=2
readonly Wednesday=3
readonly Thursday=4
readonly Friday=5
readonly Saturday=6

7 :ピラフ:2015/10/04(日) 03:57:02.21 ID:KQhWWZXy.net

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

137 :login:Penguin:2016/04/01(金) 10:48:52.54 ID:+PxKnYGY.net

1秒ごとにチェックして生きてたら….を出力死んでたらそのままみたいなことか
やってみるわ

28 :login:Penguin:2015/10/04(日) 22:52:50.99 ID:mhzx8YQK.net

おのれは誰やねん

71 :ピラフ ◆9Jro6YFwm650 :2015/11/09(月) 00:31:06.30 ID:uu5Sv9eW.net

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

参考になったらSNSでシェアお願いします!

レスを投稿する(名前省略可)

この記事を読んだ方へのおすすめ

最近のコメント

匿名 : 【いちゃ部屋】株式会社SHIFT【5ch出張所】
 新入社員はわかいそう、 在宅勤務でe-ラニングうけとけ、 ... (6/18)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫や (5/28)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 プライド高いところあるけど清輝あるなら大丈夫か (5/07)
ページTOPへ↑