[過去ログ] シェルスクリプト総合 その28 (620レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: 名無しさん@お腹いっぱい。 [sage] 2018/08/02(木) 05:22:16.82 AAS
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは 外部リンク:en.wikipedia.org にまとめられています
 最新の仕様はこちらへ 外部リンク:pubs.opengroup.org
 (左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
  外部リンク:src.illumos.org
  外部リンク[html]:heirloom.sourceforge.net
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆうな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
2chスレ:unix
596
(1): 名無しさん@お腹いっぱい。 [sage] 2022/09/24(土) 14:46:59.72 AAS
>>593
593(2): 名無しさん@お腹いっぱい。 [sage] 2022/09/19(月) 12:12:56.52 AAS
bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか?
function kotae () {
kotae=$1$2
}
kotae ab cd
echo $kotae
そのようなことをしたい場合はこうする

function kotae () {
printf -v $1 "%s" $2$3
}
kotae ret ab cd
echo $ret
597: 名無しさん@お腹いっぱい。 [sage] 2022/10/28(金) 02:25:37.28 AAS
bash 5.2.2(1)で最初の!だけ全角の
echo "abc!? xyz!"
は通るのに、半角にすると
echo "abcecho "abc!? xyz!"
>
になってしまいます。
一対の"で通すにはどうすればいいのでしょうか?

>>594-596
ありがとうございます。
printfのvオプションは初めて知りました。
598: 名無しさん@お腹いっぱい。 [sage] 2022/10/28(金) 13:13:38.41 AAS
ヒストリ機能
知らない/活用してないならオフにしておくべき
対話モードでしか機能しないから切っても特に問題はない
599: 名無しさん@お腹いっぱい。 [sage] 2022/10/29(土) 10:43:22.22 AAS
バックスラッシュをつけてエスケープ。
600: 名無しさん@お腹いっぱい。 [sage] 2022/11/06(日) 16:47:34.57 AAS
恥を忍んで質問させて下さい:
Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、
Autoconf/Autotoolsが普及した理由って何でしょう?
1)Perlよりm4の方が普及してた(どっちも文法はアレだけど)
2)というかPerl嫌いな人が少なくなかった
3)そのほか(開発モデルとか)

...imakeって何だっけ?
601: 名無しさん@お腹いっぱい。 [] 2022/11/06(日) 18:24:19.31 AAS
Autoconf/AutotoolsはGNUだからじゃね?しらんけど
602
(2): 名無しさん@お腹いっぱい。 [sage] 2022/11/07(月) 01:26:02.31 AAS
rsync -avR -e ssh ...
rsync -avR -e ssh ...

このように6行以上書くとエラーになるんですがどうしてでしょう?

ssh: connect to host xxxx: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.3]
603: 名無しさん@お腹いっぱい。 [sage] 2022/11/07(月) 06:20:59.25 AAS
6行以上書いたからじゃね?
604
(1): 名無しさん@お腹いっぱい。 [sage] 2022/11/07(月) 07:38:39.12 AAS
>>602
クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる
少し時間を空ければ大丈夫なはず
てか、サーバーは何?
605: 602 [sage] 2022/11/07(月) 11:40:12.51 AAS
>>604
ありがとうございます。そうでしたか。
コマンドの内容と関係無さそうだったので迷いました。
接続先のサーバーは自宅のraspiです。
606: 名無しさん@お腹いっぱい。 [sage] 2022/11/08(火) 09:01:57.74 AAS
もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync
607: 名無しさん@お腹いっぱい。 [sage] 2022/11/08(火) 23:15:42.53 AAS
はい、ぶたがみーるー
まあ、ここにも俺がいるわけですけどねw
608: 名無しさん@お腹いっぱい。 [sage] 2023/03/27(月) 06:41:34.11 AAS
バックしまーす
609: 名無しさん@お腹いっぱい。 [sage] 2023/06/18(日) 23:35:36.05 AAS
function YesNo {
local yn
while true; do
read -p " [Yes/No" "$1" "]: " yn
case $yn in
[Yy]*) return 0 ;;
[Nn]*) return 1 ;;
[Ee]*) if [ ! "$1" = "" ]; then return 2; fi ;;
esac
done
}

#main
YesNo ":いいえ /Else:その他"
echo $?
exit

実行すると、read: `:いいえ /Else:その他': 有効な識別子ではありません
とエラーになるのですが、どうすればいいでしょうか?
610
(1): 名無しさん@お腹いっぱい。 [] 2023/06/19(月) 06:14:08.74 AAS
-p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている

read -p " [Yes/No $1 ]: " yn
611: 名無しさん@お腹いっぱい。 [sage] 2023/06/23(金) 17:18:03.40 AAS
テスト
612: 名無しさん@お腹いっぱい。 [sage] 2023/08/23(水) 21:31:25.96 AAS
これってどうしてそうなのだろう?
613: 名無しさん@お腹いっぱい。 [sage] 2023/08/27(日) 18:57:22.73 AAS
readコマンドの引数にダブルクォートを使ってるからだぬ
だから>>610氏が指摘しているコトになってるぬ
614
(1): 名無しさん@お腹いっぱい。 [sage] 2024/02/20(火) 08:47:58.81 AAS
先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか?
if [ A ]; then
Bを算出
if [ B ]; then
 処理1
else
 処理2
fi
処理2
fi
615
(1): 名無しさん@お腹いっぱい。 [sage] 2024/02/20(火) 14:15:04.07 AAS
2度目のエルスを書かなければいいだけじゃなくて?
616: 名無しさん@お腹いっぱい。 [] 2024/02/20(火) 17:32:39.42 AAS
>>615
「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。

出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。
が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。

なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
617: 名無しさん@お腹いっぱい。 [sage] 2024/02/22(木) 06:05:52.23 AAS
>>614
else 足りなくね
処理2を1度または2度実行するのに、1箇所にしたいとかイミフ

!Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw
Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
618: 名無しさん@お腹いっぱい。 [sage] 2024/02/22(木) 18:42:19.24 AAS
{ ifを何重にもネストしたブロック } || 処理2
みたいなのでも
619: 名無しさん@お腹いっぱい。 [] 2024/03/14(木) 17:20:13.74 AAS
while ...do
処理1
done <<=LIST=
リスト1
=LIST=

while ...do
処理2
done <<=LIST=
リスト1
=LIST=

てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、

while ...do
処理1
処理2
done <<=LIST=

ではあかん。
620: 名無しさん@お腹いっぱい。 [] 2024/03/14(木) 18:05:33.59 AAS
ヒアドキュメントの中で変数を展開できます。

LIST_CONTENT="リスト1
...
"

while read s; do
printf '%s\n' "${s}"
done <<LIST
${LIST_CONTENT}"
LIST
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.249s*