シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/
探検
シェルスクリプト総合 その26 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
2017/03/20(月) 12:07:26.41
2018/05/03(木) 04:42:04.26
まあ長いのは、>>926のコードに合わせたからであって、
メインの処理はこれだけなんだけどね
i=0 start=2 length=3 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
メインの処理はこれだけなんだけどね
i=0 start=2 length=3 last=$((start+length))
for arg in "$@"; do
: $((i+=1))
[ $i -gt $length ] && shift
[ $i -ge $last ] && continue
shift
set -- "$@" "$arg"
done
printf '1: %s\n' "$1"
printf '2: %s\n' "$2"
printf '3: %s\n' "$3"
2018/05/03(木) 05:49:25.62
>>932
ちょっとリファクタリング(ってほど大層じゃないが)
selectargnum() {
func="$1"; start=$2; length=$3
shift 3
i=0; last=$((start + length))
for arg in "$@"; do
i=$((i + 1))
test ${i} -gt ${length} && shift
test ${i} -ge ${last} && continue
shift
set -- "$@" "${arg}"
done
"${func}" "${@}"
}
ちょっとリファクタリング(ってほど大層じゃないが)
selectargnum() {
func="$1"; start=$2; length=$3
shift 3
i=0; last=$((start + length))
for arg in "$@"; do
i=$((i + 1))
test ${i} -gt ${length} && shift
test ${i} -ge ${last} && continue
shift
set -- "$@" "${arg}"
done
"${func}" "${@}"
}
2018/05/03(木) 06:31:02.21
>>938
文字増やしてるだけじゃねーかw
文字増やしてるだけじゃねーかw
2018/05/03(木) 06:31:17.96
不要な文字
2018/05/03(木) 06:50:55.78
リファクタリングは文字数減らすことを言うのじゃないけど
2018/05/03(木) 07:41:52.01
不必要な機能
2018/05/03(木) 09:41:05.71
一旦SQLiteにでも格納すれば何でも出来るで
2018/05/03(木) 12:57:05.87
なんか余計に読みづらくなっただけのような
945名無しさん@お腹いっぱい。
2018/05/03(木) 13:11:25.55 解こうとしてる問題が間違っていると言ったやろw
2018/05/03(木) 13:13:23.38
bashだと簡単にできるようになったことのどこが
間違っているというのだろうか?
間違っているというのだろうか?
2018/05/03(木) 13:14:48.71
948名無しさん@お腹いっぱい。
2018/05/03(木) 13:16:44.77 >>946
問題が間違っているとハッキリ書いとるやろwアホなん?
問題が間違っているとハッキリ書いとるやろwアホなん?
2018/05/03(木) 13:17:25.13
なぜ問題が間違っているというのか?
結論を最初に持ってこないように
結論を最初に持ってこないように
950名無しさん@お腹いっぱい。
2018/05/03(木) 13:22:50.10 >>949
あ、それが分からんのかw
引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな
つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw
てかおまえ安価ぐらいできんのか
あ、それが分からんのかw
引数の意味をパースすれば任意の位置指定でのスライスなど不要やからな
つまりgetoptで十分な問題を間違った角度から解こうとしとるっつー事やw
てかおまえ安価ぐらいできんのか
2018/05/03(木) 13:33:39.18
どういう理屈で、引数の意味をパースすれば任意の位置指定での
スライスなど不要になるのでしょうか?
スライスなど不要になるのでしょうか?
952名無しさん@お腹いっぱい。
2018/05/03(木) 13:41:59.15 >>951
まず安価しろ
まず安価しろ
2018/05/03(木) 13:43:07.07
例えばfindコマンドのように
find . -type f -exec chmod 600 {} \;
-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね
find . -type f -exec chmod 600 {} \;
-execが来たら、chmodコマンドを;までをオプションとして
渡して実行みたいなのはスライス相当のものがないとできませんね
2018/05/03(木) 13:44:07.01
自分がやったことがないことだからって
問題が間違ってるということにはなりませんよ
問題が間違ってるということにはなりませんよ
2018/05/03(木) 13:44:46.06
>>950
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
根本的に何がしたいのかに依るんじゃねーのそれは
引数を解釈したいならgetoptでやるべきだが、今回やりたいのは引数のスライスそのものじゃね?
bashなら一行でできるそれをbash依存せずにやるにはどうすればって話なんじゃないか
まぁなんか妙なのが湧いてて話が無駄に複雑になってる感が否めないが
2018/05/03(木) 13:47:13.94
まあ言わないでもわかるでしょうが、
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。
find . -type f -exec echo {} \; -exec echo {} \;
わざとスルーされないように言っておきますと、
-execは残りの引数を全て、指定したコマンドの引数として実行するものではなく
; までを引数とします。だから以下のように複数の-execもしていできます。
find . -type f -exec echo {} \; -exec echo {} \;
957名無しさん@お腹いっぱい。
2018/05/03(木) 13:53:29.10 >>955
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな
位置が固定ならいきなりスライスでも構わんが
今回のやつは任意の位置を指定したいと言っとるやろ
つまりその任意の位置がどこか分かった時点で引数の解析は終わっとるから
必要な引数も選別できているはずなんや
つまりそこからさらに位置指定でスライスしたいというのは
引数解析のアプローチが間違っとるいう訳やな
2018/05/03(木) 14:10:06.58
>>957
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
そして、その選別した引数(複数)を別の関数に渡すんだろ?
配列があれば、配列に選別していった引数を入れていけばいいだろうが
bash依存しないなら、配列は使えないよな。
お前ならどうするんだ?
2018/05/03(木) 14:10:06.74
960名無しさん@お腹いっぱい。
2018/05/03(木) 14:17:44.042018/05/03(木) 14:21:33.10
962名無しさん@お腹いっぱい。
2018/05/03(木) 14:22:57.282018/05/03(木) 14:23:53.17
あれほど問題が間違っていると偉そうなこと言ったくせに
問題は間違ってないってことでいいんだろうな
問題は間違ってないってことでいいんだろうな
2018/05/03(木) 14:24:26.11
965名無しさん@お腹いっぱい。
2018/05/03(木) 14:25:12.822018/05/03(木) 14:25:16.94
2018/05/03(木) 14:26:18.22
968名無しさん@お腹いっぱい。
2018/05/03(木) 14:26:43.002018/05/03(木) 14:28:32.21
970名無しさん@お腹いっぱい。
2018/05/03(木) 14:29:43.062018/05/03(木) 14:32:04.43
972名無しさん@お腹いっぱい。
2018/05/03(木) 14:34:28.222018/05/03(木) 14:38:23.58
974名無しさん@お腹いっぱい。
2018/05/03(木) 14:40:51.17 >>973
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
いくらお子ちゃまでもナチュラルに話がループするバカにつきあう気はないで生憎w
2018/05/03(木) 14:40:58.71
偉そうに>>957で引数の選別をする方法で
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。
まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw
できるような言い方をしているということは、
"このやり方の続き" でやる方法も当然思いついてるはず
質問に答えようか。
まさかここまでいって、この方法じゃ実現不可能だった
なんていうはずがないよなw
2018/05/03(木) 15:39:01.57
やたらめったに長ったらしいコード書いたアホが元凶
2018/05/03(木) 15:57:16.13
たしかに俺のコードは長すぎたし引数に改行が含まれると各行を引数だと見做してしまう
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。
修正が困難な不具合があるからね(もし可能だという方がいるなら是非教えてほしい)。
実は俺自身もシェルスクリプトの経験はあまりないんだ。まだ仕事してねーし。
それが原因で場が乱れたとするなら申し訳ない。
ただ、言わせてもらうが、俺は寧ろ荒れた原因は「問題が間違ってる; 質問は正しい態度で」なんていう
主張をageながら口説いてる奴にあると思うがな。
2018/05/03(木) 16:20:04.93
どっちもはしゃぎ過ぎ
それに、安価だのageだの馬鹿みたい
それに、安価だのageだの馬鹿みたい
2018/05/03(木) 16:29:15.75
2018/05/03(木) 16:29:46.34
2018/05/03(木) 16:31:30.06
IDが出ないスレでこれほど見難い言い争いはあんま見ないな。いや醜いかw
2018/05/03(木) 16:41:10.54
ここって建設的じゃないよな、ホント
2018/05/03(木) 17:10:05.54
自力で解いたっつてんだろ、何度も。偉ぶってんのはどっちなんだか。
2018/05/03(木) 17:33:34.69
醜すぎw
2018/05/03(木) 17:54:41.55
2018/05/03(木) 19:24:32.42
この人は問題を解きたいんじゃなくて
問題を自分のルールで解かせたいだけなんだと思う
問題を自分のルールで解かせたいだけなんだと思う
2018/05/03(木) 19:33:59.23
自分のルールってなんのことや?
2018/05/03(木) 20:13:25.91
そうじゃなくて呈示されたコードの完成度が低くて、かつ
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
自分で作ったコードが要件を満たしていたから「お前ら馬鹿ばっかだな」になるんでしょう?
989名無しさん@お腹いっぱい。
2018/05/03(木) 20:15:23.07 ただのお子ちゃまやないかw
間違っとる言われてボクは間違ってないてすねとるだけやでw
間違っとる言われてボクは間違ってないてすねとるだけやでw
2018/05/03(木) 20:27:22.30
2018/05/03(木) 20:28:19.18
いまいち誰が誰だかなわからない追うのめんどくさすぎなのに、論評続けるねえ
質問内容に文句つけ続けのオッサン:一理あるが、一理でしかない。しつこいわっ
質問したヤツ:自力で解いたとかウザいわ。だったら最初から質問すんなwおっさんの一理を理解して素直に受け取れ
質問内容に文句つけ続けのオッサン:一理あるが、一理でしかない。しつこいわっ
質問したヤツ:自力で解いたとかウザいわ。だったら最初から質問すんなwおっさんの一理を理解して素直に受け取れ
2018/05/03(木) 20:37:05.47
>自力で解いたとかウザいわ。だったら最初から質問すんなw
書いた途端に解が分かったとかザラにあるだろ
お騒がせしました、とか書けない人格はアレだけど
書いた途端に解が分かったとかザラにあるだろ
お騒がせしました、とか書けない人格はアレだけど
2018/05/03(木) 20:38:34.10
2018/05/03(木) 20:58:18.53
能力はありそうに見えるのにもったいないよね。ああいうので仕事を失しなうってのは。
俺の同僚にも居たわ。正直に言って、俺より優秀だったのに人当たりが強すぎてやんわり退職させられて
先月会ったらトビやりながら独学でコーディングしてるらしい
俺の同僚にも居たわ。正直に言って、俺より優秀だったのに人当たりが強すぎてやんわり退職させられて
先月会ったらトビやりながら独学でコーディングしてるらしい
995名無しさん@お腹いっぱい。
2018/05/05(土) 15:07:28.61 すいません。すごく細かいことなんですが、
シェルの変数に関する展開で、
${somevar:-otherstring}
という、somevarに変数が格納されていなればotherstringを変数の値として採用するという仕組みがありますよね。
ここにコマンド展開が使えるということに最近気がつきました。
${somevar:-$(somecommand)}
これは、展開の順序としては
I. コマンド展開→変数の展開
somecommandがresultを返し、${somevar:-result}になってresultが展開される
のか、
II. 変数の展開→コマンド展開
${somevar:-$(somecommand)}が$(somecommand)になってresultが返る
のか、
どちらか分かりますか?
ぶっちゃけ、この違いが影響するような状況に遭遇したことがないのですが、よりよいシェルスクリプトの理解の為にどうかよろしくおねがいします。
シェルの変数に関する展開で、
${somevar:-otherstring}
という、somevarに変数が格納されていなればotherstringを変数の値として採用するという仕組みがありますよね。
ここにコマンド展開が使えるということに最近気がつきました。
${somevar:-$(somecommand)}
これは、展開の順序としては
I. コマンド展開→変数の展開
somecommandがresultを返し、${somevar:-result}になってresultが展開される
のか、
II. 変数の展開→コマンド展開
${somevar:-$(somecommand)}が$(somecommand)になってresultが返る
のか、
どちらか分かりますか?
ぶっちゃけ、この違いが影響するような状況に遭遇したことがないのですが、よりよいシェルスクリプトの理解の為にどうかよろしくおねがいします。
2018/05/05(土) 15:36:58.33
IIなんじゃねーの(鼻くそホジホジ)
2018/05/05(土) 23:01:08.19
somecommandを副作用のあるコマンド(touchとかrmとか)にしでsomevarがある状態とない状態でそれぞれどうなるか比べてみればいい。たぶんIIだと思うが。
2018/05/06(日) 01:02:57.40
2018/05/06(日) 10:46:14.65
echo 999
1000名無しさん@お腹いっぱい。
2018/05/06(日) 10:46:54.81 exit 1000
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 411日 22時間 39分 28秒
新しいスレッドを立ててください。
life time: 411日 22時間 39分 28秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【サッカー】上田綺世が衝撃の4ゴール&PK奪取の大暴れ!驚異のリーグ戦15戦18発、オランダの日本人最多得点記録を更新 [征夷大将軍★]
- 中国海軍の空母艦載機が空自戦闘機に断続的にレーダー照射 空対空の照射は初公表 [七波羅探題★]
- 【地理/鉄道】「桃鉄」最新作で香川県の駅名に誤り…「瀬戸大橋の玄関口の町」は大人の対応 [あずささん★]
- 小林よしのり 日中関係、来年「ますます日本は不利に… 加害者の分際で被害者ぶって、中国が横暴だと毅然と振る舞っても滑稽なだけ」★2 [冬月記者★]
- 働いて働いて働いても生活は…円安に歯止めが掛からず生活は苦しくなるばかり…サナエノミクスの限界で「高市不況」がやってくる ★7 [ぐれ★]
- 【テレビ】家入レオ、勘当同然での上京告白「敷居はもう跨がないでください」 14年の確執語る [湛然★]
- 30歳超えてから、夜は性欲より睡眠欲が増した
- 「増税クソババア」即効で効いてしまい増税撤回www [261472595]
- 男なのに乳首感じないの?
- 弱者男性「カリカリ女は嫌!」女性「カリカリ女性って『韓国人』や『中国人』の美人みたいでかわいいじゃん。理想。君頭ネトウヨなの? [483447288]
- 千晴が書き込んだ数だけ髪の毛が抜けるスレ
- 道路から「丸見え」の露天風呂、公然わいせつ罪では?のぞき見た人の刑事責任は ? [389326466]
