シェルスクリプト質問スレ

1 :login:Penguin:2019/04/12(金) 20:22:09.78 ID:ga+nyK60.net
シェルスクリプトに関する質問スレです。

16 :login:Penguin:2020/11/28(土) 21:21:02.92 ID:H/pve6/s.net

gotoなんてラベルの場所に飛ぶだけじゃん

47 :login:Penguin:2021/06/18(金) 16:13:51.93 ID:xODAv2nB.net

改行のない行の末尾って何よ。

4 :login:Penguin:2019/10/27(日) 23:07:33.30 ID:Q9HmdE9E.net

上げさせてください。

27 :login:Penguin:2020/12/05(土) 09:01:53.70 ID:Ts+UhpZc.net

お前はバッチファイル特有の話をしただけだったってことが真相かw

45 :login:Penguin:2021/06/15(火) 12:05:40.24 ID:WDa66Wnu.net

標準入力をreadして変数に溜め、望みの時間sleepして標準出力にechoするだけのwhileループじゃん

26 :login:Penguin:2020/12/05(土) 04:50:25.04 ID:aPsfjGiM.net

君みたいながさつな人間にはそんな仕様で問題ないのかもしれんが
sh作った人はそうじゃなかったってことだよ

44 :login:Penguin:2021/06/07(月) 11:25:30.38 ID:vEYRV92+.net

ありがとうございましたーーーー!

33 :login:Penguin:2020/12/06(日) 01:56:35.20 ID:/kQnwSfL.net

の言うことは正しい。
そもそも、WHILE、FOR は GOTO [後方] の亜種だし、IF THEN は本質的に IF GOTO だ。
つまり、GOTO が技術的理由で実現できなければ、全てのフロー制御は実現できない。というか、GOTO 機能自体は単なるマシン語命令なので、実現できない理由は特に無い。
言語の基礎知識レベルの話だが、これ等が知ったかぶりや妄言に聞こえるようでは、救いようが無いね。

41 :login:Penguin:2021/02/16(火) 09:41:02.07 ID:kZGVXNU/1

シェルスクリプトのbashでの変数について教えてください。
HOGE1=”fugafuga”
HOGE2=”pagepage”

とした場合、for文で回し変数の値がfugafuga以外だった時だけ
何か処理を実施したい場合、testの書き方はどうすればよいですか?
下記だとうまくいきませんでした。
for i in 1 2 3 4
do
   if [ “$HOGE$i” != “fugafuga” ]; then
      何かの処理
   fi
done

39 :login:Penguin:2020/12/06(日) 02:30:39.96 ID:cfA/TiGD.net

> Thompson Shell のデザインは、Multics の模倣を意図したものだった。
> プログラムの分岐処理で欠かせない if や goto といった語ですら、別々のコマンドとして実装されていた[1]。

って書いていたから当時はまだgotoあったんだな
改良するにつれてなくしたと

21 :login:Penguin:2020/12/04(金) 23:14:30.81 ID:+G9n1HNW.net

gotoなんてアセンブラで2〜4バイト程度で実現できるやろ
16KBなんて広大だ

22 :login:Penguin:2020/12/04(金) 23:32:43.90 ID:29P9oGAn.net

お花畑で裏山。w

28 :login:Penguin:2020/12/05(土) 10:16:37.06 ID:s8sjtagm.net

sh作った人の志向であったというなら、ハナからそう言えばいい。
小メモリだとGOTOを実装できないなどという、知ったかぶりにも満たない妄言は要らない。

52 :login:Penguin:2021/07/03(土) 23:33:42.29 ID:jCdyWCtw.net

インタラクティブにシステムコール呼べたら楽かなと思ってbashのヒアストリングをgccに食わせたんだけど
gcc -o ${blob} <<ccode
¥#include <…>

${fun}(${argv})
ccode
ld:/dev/fd/nn見つからないよ
collect2: ld returned 1

gccがldを非同期実行し、fdが回収された後にもldが動いてるのかと思い
(gcc … & 1s)のように遅らせてもダメな謎
とりあえずmktempで動きはするけど、中間ファイル要らないクリーンなやり方ないかな

大体こんな雰囲気

code=$(mktemp –suffix ¥.c)
blob=…
(include/漁って型取得、引数成形)
IFS=, declare argv=”$*”
cat <<c >|${code}
¥#include <…>

${fun}(${argv})

c

gcc ${code} -o ${blob}
rm -rf …

19 :login:Penguin:2020/12/04(金) 13:13:09.69 ID:ywaWilQb.net

メモリは使ったら無くなるんですよ?
再起動しなければどんどん減っていきます。

と言ってるんだろ

48 :login:Penguin:2021/06/18(金) 17:47:38.78 ID:bnil1fLC.net

$ cat sample.txt
(snip)
This line is end of file.[EOF]

$ cat sample.txt
(snip)
This line is end of file.
[EOF]

にしたいってことじゃね?

25 :login:Penguin:2020/12/05(土) 03:09:07.89 ID:s8sjtagm.net

だから何が言いたいんだ?
例えば、大容量640KBのメモリしかないDOSのBATファイルならスクリプトファイルを読み直してるんだろ。動作中にファイルが書き換わってたら、変わったように動作するんだから。
そんなの実現方法の一つに過ぎんだろ。

51 :login:Penguin:2021/07/03(土) 22:59:15.09 ID:EIKNeueg.net

よくこんな暗号みてぇなもん覚えられんなw

14 :login:Penguin:2020/11/28(土) 16:07:55.28 ID:YtZOOFJV.net

シェルスクリプトは完全逐次処理やろ。
gotoを実装するのはかなり難しいと思うが。
先見の明よりも、たんに面倒だったのでは。

13 :login:Penguin:2020/11/28(土) 15:46:36.13 ID:MhK0ESFR.net

そういやシェルスクリプトにgotoがないっていうのは
シェルスクリプト(のオリジナル)が作られた時期から見て
先見の明を持ってるんじゃねーか?
当時の言語はgotoはあって当然だったと思うんだが

3 :login:Penguin:2019/10/27(日) 23:06:44.49 ID:Q9HmdE9E.net

質問お願いしましす。

リモートで最新の1つを残してログを削除したいです。
$ ssh host ‘rm -f `ls -1t /home/app/201910/*.log | tail -n+2`’

これを複数のディレクトリで実行しようとしたのが、
var1=201909
var2=201910
array=($var1 $var2)

for var in ${array[@]}
do
ssh host rm -f $(tail -n+2 $(ls -1t /home/app/${var}/*.log))
done
なのですが、ls -1t /home/app/${var}/*.logがローカルで実行されてしまい
ます。(ls: /home/app/201909/*.log: No such file or directory)

うまくいくようにアドバイスなどいただけるとうれしいです。
女子高生です。

3 :login:Penguin:2019/10/27(日) 23:06:44.49 ID:Q9HmdE9E.net

質問お願いしましす。

リモートで最新の1つを残してログを削除したいです。
$ ssh host ‘rm -f `ls -1t /home/app/201910/*.log | tail -n+2`’

これを複数のディレクトリで実行しようとしたのが、
var1=201909
var2=201910
array=($var1 $var2)

for var in ${array[@]}
do
ssh host rm -f $(tail -n+2 $(ls -1t /home/app/${var}/*.log))
done
なのですが、ls -1t /home/app/${var}/*.logがローカルで実行されてしまい
ます。(ls: /home/app/201909/*.log: No such file or directory)

うまくいくようにアドバイスなどいただけるとうれしいです。
女子高生です。

18 :login:Penguin:2020/12/04(金) 02:40:48.92 ID:PAEzIreY.net

の意味を、誰か説明してくれ。

35 :login:Penguin:2020/12/06(日) 02:08:31.12 ID:jGLSVz7n.net

スクリプト言語の制御構造をマシン語命令とか言うバカ、初めて見た

46 :login:Penguin:2021/06/18(金) 16:00:55.53 ID:bouE9vru.net

テキスト行の末尾に改行があればそのまま、なければ改行を追加、みたいなフィルタはどう書くのが簡単?

sed -z …でできるんだけど、実はもっとあっさり!だったりしないかな。

34 :login:Penguin:2020/12/06(日) 02:08:08.39 ID:cfA/TiGD.net

GOTO禁止ブームや構造化プログラミングがでたのっていつなんだろう?
シェルスクリプトにGOTOがないのはその話を踏まえた上の設計だよね?

37 :login:Penguin:2020/12/06(日) 02:11:28.22 ID:cfA/TiGD.net

最初のシェルは1971年だから、やっぱりGOTO有害論のあとか
https://ja.wikipedia.org/wiki/Thompson_Shell

40 :login:Penguin:2020/12/06(日) 02:33:16.62 ID:cfA/TiGD.net

POSIXシェルの前身であるBourne Shellでようやくgotoが消えたっぽい
https://ja.wikipedia.org/wiki/Bourne_Shell

32 :login:Penguin:2020/12/06(日) 01:52:29.29 ID:cfA/TiGD.net

どういう意味?
breakとかcontinueは実際にジャンプしてるんだが?

36 :login:Penguin:2020/12/06(日) 02:09:38.25 ID:cfA/TiGD.net

29 :login:Penguin:2020/12/05(土) 22:26:18.30 ID:gKsDqE5D.net

とりあえず、gotoを追加するパッチでも提出してこいよ?

10 :login:Penguin:2020/04/18(土) 02:06:12.81 ID:jLP8+C0w.net

日本語のパス・ファイル名は、使えるの?
.ogg/.mp3 も、両方とも使えるの?

それと、あちこちに、echo `date`
を入れて、時刻を見た方がよい

do
echo `date`
/usr/bin/totem 何々

echo `date`
/usr/bin/totem 何々

echo `date`
done

23 :login:Penguin:2020/12/05(土) 02:05:42.72 ID:Ts+UhpZc.net

MSXは16KBの機種もあってgotoがあるBASIC搭載ですが
スクリプト?読み直す?何を言ってるんでしょうか?

5 :login:Penguin:2019/10/27(日) 23:37:34.99 ID:KbsZ4Niq.net

こっちでやれ
シェルスクリプト総合 その32
https://mevius.5ch.net/test/read.cgi/tech/1571929725/

38 :login:Penguin:2020/12/06(日) 02:16:15.15 ID:pAeBLops.net

しかし、「有害論」の影響なのかどうかはわからない。
その後でも、gotoのある言語もない言語もあるわけで。

2 :login:Penguin:2019/04/13(土) 08:00:52.24 ID:mHs4A1+v.net

宿題は自力でやること

30 :login:Penguin:2020/12/06(日) 00:58:26.39 ID:cfA/TiGD.net

breakとかcontinueがそれ
gotoの乱用を防ぐために、ループの開始と終わりにしか
gotoできないようになってる

9 :login:Penguin:2020/04/17(金) 21:01:57 ID:ueg9oyq0.net

ビデオ(Totem)で曲4つをループして聴くシェルスクリプトを作ったのですが、1曲目だけで終わってしまいます。
以下ソースです

#!/bin/bash
while true
do
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/WinterSong.ogg ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/世界中の誰よりきっと.mp3 ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/サイレント・イヴ.ogg ;
/usr/bin/totem /home/hiromitsu/ミュージック/music/album1/無題のフォルダー/Itsuka no Merry Christmas.mp3
done
どこがいけないんでしょうか・・・?

24 :login:Penguin:2020/12/05(土) 02:27:41.94 ID:aPsfjGiM.net

スクリプトスレで「スクリプト?」とか言い出すようなお爺ちゃんは黙っててくれよ

6 :login:Penguin:2019/10/28(月) 12:28:06.90 ID:GFu2H5Oy.net

>質問お願いしましす。

お願いされても…特に質問はありません

49 :login:Penguin:2021/06/26(土) 13:29:06.46 ID:3hhiwe6I.net

cat aaa | awk ‘1’

これなら、sedよりあっさり?
とは言えないか。

43 :login:Penguin:2021/06/07(月) 02:12:34.71 ID:a9qe7L9c.net

マルチは死ねば良いのに

11 :login:Penguin:2020/09/25(金) 17:01:00.14 ID:rcXzyqi8.net

#cat test.sh
line=aaa,bbb,ccc
arr=($(IFS=,; echo $line))
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

#sh test.sh
aaa
bbb
ccc

と期待通りを結果を得られるのですが、これを

# line=aaa,bbb,ccc
# arr=($(IFS=,; echo $line))
# echo ${arr[0]}
aaa bbb ccc
# echo ${arr[1]}

# echo ${arr[2]}

#

と1行ずつTeratermに張り付けて実行すると期待する結果を得られません。
なにが違うのでしょうか。

31 :login:Penguin:2020/12/06(日) 01:03:45.60 ID:pAeBLops.net

それこそ、知ったかぶりにも満たない妄言なんしゃねえの?w

8 :login:Penguin:2019/10/29(火) 02:44:55.55 ID:CaAjlyZm.net

お願いされたから反応したのに、もげろってどういうことよ

50 :login:Penguin:2021/07/03(土) 19:05:53.16 ID:QPB5ysNZ.net

行末に改行があろうがなかろうが改行文字(¥n)を削除してから
行末文字($)を改行文字(¥n)で置き換える(行末に改行文字を追記する)
cat sample.txt | tr –delete ‘¥n’ | sed ‘s/$/¥n/’

20 :login:Penguin:2020/12/04(金) 23:02:19.60 ID:mk+BcjcR.net

大容量16KBのメモリしかないシステムでgotoを実現しようと思ったら
スクリプトファイルを読み直す以外の対応はできないだろ
その間にファイルが書き換わっていたらどうすんの?
とか考えもせずに簡単とか言い出すようなバカには理解できなかったか

17 :login:Penguin:2020/12/04(金) 02:23:12.31 ID:mk+BcjcR.net

また先頭から読み直すの?
当時のメモリの量を知らないわけでもあるまいに

42 :login:Penguin:2021/06/06(日) 22:12:52.88 ID:EGRoOpIk.net

標準出力の速度を制限したり、通信速度を表示するコマンドってありますか?

12 :login:Penguin:2020/11/28(土) 15:04:57.14 ID:MDlmtOMg.net

bash(1)にはgotoという文言は見えないが、gotoに類した命令ある?

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

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

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

最近のコメント

匿名 : 東京の中小IT企業の情報交換スレ
 伝説の接待王ワロタ (9/21)
匿名 : 東京の中小IT企業の情報交換スレ
 ブラック企業の話ばっかだな (8/21)
匿名 : 【残業代】福井 株式会社アスタ【未払い】
 本当に残業代未払いなんか? (8/19)
ページTOPへ↑