シェルスクリプト総合 その14
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2009/01/29(木) 06:54:48スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ落ちたみたいなのでリンク省略。
0951名無しさん@お腹いっぱい。
2009/06/19(金) 21:44:10http://znz.s1.xrea.com/t/?date=20090608
0952名無しさん@お腹いっぱい。
2009/06/19(金) 21:48:470953名無しさん@お腹いっぱい。
2009/06/19(金) 22:07:02http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532302
0954名無しさん@お腹いっぱい。
2009/06/19(金) 22:17:37シェル変数に代入してもバグるね。
$ echo $LANG
ja_JP.UTF-8
$ bash -c 'a="あいうえお"; echo "$a"'
あいうえお
$ dash -c 'a="あいうえお"; echo "$a"'
?????
0955名無しさん@お腹いっぱい。
2009/06/19(金) 22:31:40あいうえお
はて?
0956名無しさん@お腹いっぱい。
2009/06/19(金) 22:45:36ja_JP.UTF-8
$ dash -c 'printf "????n"'
あ
$ dash -c 'a=`printf "????n"`; echo "$a"'
?
$ bash -c 'a=`printf "????n"`; echo "$a"'
あ
0957名無しさん@お腹いっぱい。
2009/06/19(金) 22:47:42ja_JP.UTF-8
$ dash -c 'printf "¥343¥201¥202¥n"'
あ
$ dash -c 'a=`printf "¥343¥201¥202¥n"`; echo "$a"'
?
$ bash -c 'a=`printf "¥343¥201¥202¥n"`; echo "$a"'
あ
0958名無しさん@お腹いっぱい。
2009/06/19(金) 22:53:53あ
無問題、てかおまいの書き込みはbackslashじゃなくてyenになってんぞ?
0959名無しさん@お腹いっぱい。
2009/06/19(金) 23:46:220960名無しさん@お腹いっぱい。
2009/06/20(土) 00:07:120961名無しさん@お腹いっぱい。
2009/06/20(土) 11:07:33ホント犬廚ってレベル低いなwww
0962名無しさん@お腹いっぱい。
2009/06/20(土) 11:31:450963名無しさん@お腹いっぱい。
2009/06/20(土) 11:43:03そういう問題じゃない。ちゃんと読み直せ。
0964名無しさん@お腹いっぱい。
2009/06/20(土) 11:49:070965名無しさん@お腹いっぱい。
2009/06/21(日) 11:15:50http://pc11.2ch.net/test/read.cgi/linux/1241948212/
【dashが】Debian GNU/Linux スレッド Ver.60【バグ持ち】
0966名無しさん@お腹いっぱい。
2009/06/22(月) 03:13:53# cat test.sh
TEST1=45:0:0:0
TEST2=aaa.bbb.ccc
echo "TEST1%%:* = ${TEST1%%:*}"
echo "TEST2##.* = ${TEST2##*.}"
# sh test.sh
TEST1%%:* = 45
TEST2##.* = ccc
どうしてこうなるのかが、わからないんです orz
キーワードが悪いのか、ググっても解決できない・・・
0967名無しさん@お腹いっぱい。
2009/06/22(月) 05:31:15$ man sh
${parameter%word}
Remove Smallest Suffix Pattern. The word is expanded to produce
a pattern. The parameter expansion then results in parameter,
with the smallest portion of the suffix matched by the pattern
deleted.
${parameter%%word}
Remove Largest Suffix Pattern. The word is expanded to produce a
pattern. The parameter expansion then results in parameter, with
the largest portion of the suffix matched by the pattern deleted.
${parameter#word}
Remove Smallest Prefix Pattern. The word is expanded to produce
a pattern. The parameter expansion then results in parameter,
with the smallest portion of the prefix matched by the pattern
deleted.
${parameter##word}
Remove Largest Prefix Pattern. The word is expanded to produce a
pattern. The parameter expansion then results in parameter, with
the largest portion of the prefix matched by the pattern deleted.
0968名無しさん@お腹いっぱい。
2009/06/22(月) 05:49:40ありがとう
自分の愚かさを理解しました
初心に戻ります・・・
ありがとう!
0969名無しさん@お腹いっぱい。
2009/06/23(火) 00:07:39dir=${1=/tmp}
こんな感じでスマートに書けるかと思ったらできなかったんですがどうなんでしょう?
0970名無しさん@お腹いっぱい。
2009/06/23(火) 00:37:180971名無しさん@お腹いっぱい。
2009/06/23(火) 06:40:26dir=${1-/tmp}
ちなみに、bash以外の開発でも↑の書き方で桶。
0972名無しさん@お腹いっぱい。
2009/06/23(火) 08:21:35自分なら
dir=${1:-/tmp}
0973名無しさん@お腹いっぱい。
2009/06/23(火) 08:28:19それだと、
shellscript ''
みたいに空文字列を敢えて引数にした時まで、
/tmp に変換されてしまう。
敢えて空文字列指定はしたいので。
0974名無しさん@お腹いっぱい。
2009/06/24(水) 01:58:04>>972
そもそも書式間違ってたようですね
ありがとうございます!
0975名無しさん@お腹いっぱい。
2009/06/29(月) 21:56:04hoge0:0 = "TRUE"
hoge0:1 = "TRUE"
hoge0:2 = "TRUE"
・
・
hoge0:9 = "TRUE"
上記の様な記述がされたテキストのhoge0:0以外の"TRUE"の
部分だけを"FALSE"へ置換したいのですが、sed等の置換で
置換可能でしょうか?
全ての"TRUE"を"FALSE"に変更するのであれば
簡単に出来ますが、「置換条件にあった複数行の数文字目以降だけを置換」
みたいな事って出来るんでしょうか?
0976名無しさん@お腹いっぱい。
2009/06/29(月) 21:59:54sed '/hoge0:0/!s/TRUE/FALSE/'
0977名無しさん@お腹いっぱい。
2009/06/29(月) 23:01:28ありがとうございます。
これで何とかなりそうです。
0978名無しさん@お腹いっぱい。
2009/06/30(火) 03:41:23これって何?どうやったら直るの?
0979名無しさん@お腹いっぱい。
2009/06/30(火) 04:26:51termcap について語るスレ
0980名無しさん@お腹いっぱい。
2009/06/30(火) 07:37:470981名無しさん@お腹いっぱい。
2009/06/30(火) 12:14:39$ reset
0982名無しさん@お腹いっぱい。
2009/06/30(火) 14:58:21そろそろ産め。
0983名無しさん@お腹いっぱい。
2009/07/01(水) 01:52:42その一コマンドでbashが三日分死ぬ
0984名無しさん@お腹いっぱい。
2009/07/01(水) 06:14:500985名無しさん@お腹いっぱい。
2009/07/01(水) 08:13:060986名無しさん@お腹いっぱい。
2009/07/01(水) 09:58:32http://pc12.2ch.net/test/read.cgi/unix/1246408968/
0987名無しさん@お腹いっぱい。
2009/07/01(水) 14:39:200988名無しさん@お腹いっぱい。
2009/07/01(水) 15:04:35Solarisにはない。
0989名無しさん@お腹いっぱい。
2009/07/01(水) 18:12:260990名無しさん@お腹いっぱい。
2009/07/01(水) 18:22:130991名無しさん@お腹いっぱい。
2009/07/01(水) 22:11:280992名無しさん@お腹いっぱい。
2009/07/01(水) 23:52:52/usr/ucb/resetってなかったっけ?
$ tput reset
すれば済むことだけど。
0993名無しさん@お腹いっぱい。
2009/07/02(木) 06:38:47ダウト。
tput resetでは、画面のエスケープシーケンスがリセットされるだけで、
sttyの設定(^Mとか)はリセットされない。
>$ tput reset
>すれば済むことだけど。
済まない。
0994名無しさん@お腹いっぱい。
2009/07/02(木) 07:35:370995名無しさん@お腹いっぱい。
2009/07/02(木) 21:28:530996名無しさん@お腹いっぱい。
2009/07/03(金) 10:30:40最近はvncが多いのか?
0997名無しさん@お腹いっぱい。
2009/07/03(金) 15:00:24VNCは暗号化されないからSSHは捨てられないよな。
VNC+SSHだってるかうし。
0998名無しさん@お腹いっぱい。
2009/07/03(金) 20:36:02無い事にしてしまいたいニダ
0999名無しさん@お腹いっぱい。
2009/07/03(金) 20:52:561000名無しさん@お腹いっぱい。
2009/07/03(金) 20:56:0510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。