シェルスクリプト総合 その19
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001シェルスクリプトライター
2011/12/10(土) 20:06:40.38スクリプトのお勉強・自慢・腕試しなどにどうぞ。
□お約束
・特記なき場合は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 でトレースしましょう。
前スレ
シェルスクリプト総合 その18
http://hibari.2ch.net/test/read.cgi/unix/1308195527/
次スレは >>970 で。
0855名無しさん@お腹いっぱい。
2012/05/18(金) 07:00:59.45参考までに
1. Bourne Shell Tutorial
http://www.grymoire.com/Unix/Sh.html
The original version of the Bourne shell didn't have functions. If you wanted to perform an operation more than once, you either had to duplicate the code, or create a new shell script.
2. Linux におけるシェルの進化
http://www.ibm.com/developerworks/jp/linux/library/l-linux-shells/?cmp=dw&cpb=dwlin&ct=dwrss&cr=dwrss&ccy=jp&csr=012012
ただし、関数を定義する機能は欠けていました。
3. 知っている限りでは、ここが一番情報が多い
traditional Bourne shell family / history and development
http://www.in-ulm.de/~mascheck/bourne/
The Variants
A summary of the most important changes
? Version 7 (1979) control structures, cmd substitution, () and {}, arbitrary variable names, trap, eval, special parameter substitutions, case
? System III (1981) #, [!...], colon parameter substitution, set --
? SVR1 (1983) shift n
? SVR2 (1984) functions, built-ins: unset echo type, redirection for builtins
4. 3の下の方のSource codeにある、Nikola Vladov のマニュアルで、
man v7sh
BUGS Coexists with but doesn't understand shell functions.
5. FreeBSD Portsはよく分かりませんが、
v7sh FreeBSD
http://www.freebsdsoftware.org/shells/v7sh.html
functions aren't supported and command line input is not 8 bit clean
0856名無しさん@お腹いっぱい。
2012/05/18(金) 15:41:41.74>>855
ありがとうございます!やっぱりなかったんですね
case文で;;を使用してもcase文抜けられないのも仕様なのかなぁ
マニュアル読んだら使用できそうではあったんですけども・・・一応使用したテストスクリプト上げておきます。
#!/usr/local/bin/v7sh
case $1 in
a)
echo "A!!"
;;
b)
echo "B!!"
;;
c|d)
echo "C or D"
;;
[e-h])
echo "E kara H"
;;
*)
echo "NANIKORE?"
;;
esac
で結果が以下のようになりました。
$ test.sh a
A!!
NANIKORE?
0857名無しさん@お腹いっぱい。
2012/05/18(金) 16:34:52.98ソースあるんだから読んで解析してくれ
読みにくいってレベルじゃないけど
0858名無しさん@お腹いっぱい。
2012/05/18(金) 20:07:10.23そのままコピペしてv7shで試しましたが、こちらでは期待通りの動作でした。
$ ./v7case.sh a
A!!
$
0859名無しさん@お腹いっぱい。
2012/05/18(金) 22:31:03.13謎ですね・・・v7shなんて過去のものですから大差があるとは考えにくいですし
通常のコマンド待ち状態で ;; を打つとエラーが出ますから
case内でしか特殊な意味を持たないと思われるんですけどね・・・
0860名無しさん@お腹いっぱい。
2012/05/24(木) 17:44:12.51例えば、$HOME/work/hogeでいつも作業するのでbash起動時にそこにいて欲しい。
$HOMEを書きかえると他にも影響があり過ぎるので別の方法教えてください。
適切なスレが見つからなかったので、誘導して。
0861名無しさん@お腹いっぱい。
2012/05/24(木) 18:49:28.230862名無しさん@お腹いっぱい。
2012/05/24(木) 20:59:36.08恥ずかしいー
0863名無しさん@お腹いっぱい。
2012/05/24(木) 21:28:32.290864名無しさん@お腹いっぱい。
2012/05/25(金) 02:08:36.57-xをつけて実行してみたところ、
# bash -x secrets.sh
+ echo -n
: Invalid argument: apks.txt
+ echo -n
: Invalid argument: output.txt
secrets.sh: line 5: syntax error near unexpected toke' `do
'ecrets.sh: line 5: `do
以下のようになりました。
0865名無しさん@お腹いっぱい。
2012/05/25(金) 10:06:26.31hexdump -C secrets.sh | head
したら、0d 0aになってる所あるんじゃないの?
0866名無しさん@お腹いっぱい。
2012/05/25(金) 11:45:35.260d が付いていたとしても >>864 の Invalid argument: のエラーにはならないから、その問題じゃないな。
0867名無しさん@お腹いっぱい。
2012/05/25(金) 11:51:53.28Invalid argumentの理由はシステム依存だろうな。
0868名無しさん@お腹いっぱい。
2012/05/25(金) 13:17:54.88FATとかのファイルシステムに echo > 'hoge.txt^M' すると、
: Invalid argument
って出るよ。
0869名無しさん@お腹いっぱい。
2012/05/25(金) 16:05:55.12違うパーティションに移して実行してみました。
# bash -x secrets.sh
+ echo -n
+ echo -n
secrets.sh: line 5: syntax error near unexpected toke' `do
'ecrets.sh: line 5: `do
0870名無しさん@お腹いっぱい。
2012/05/25(金) 16:23:38.260d を消せと。
0871名無しさん@お腹いっぱい。
2012/05/25(金) 16:25:46.48だから、>>865 が言うように行末に(見えない) ^M (0d) が付いてるのが原因だって。
for hoge in hoge^M
do^M
みたいになってて、forの行では ^M がそういう文字として解釈されるから
一応エラーは出ないけど、次の do の行で、doの代わりに do^M が書いてあるから、
syntax error near unexpected token `do^M'
と出る。^Mはカーソル移動を伴うから、`do^M' の表示が乱れて
toke' `do みたいにおかしく表示されているのも説明が付く。
0872名無しさん@お腹いっぱい。
2012/05/25(金) 16:42:39.18do^Mとは
書いてありませんでした。
コピペしてるので写し間違いはないはずです。
0873名無しさん@お腹いっぱい。
2012/05/25(金) 17:00:31.790874名無しさん@お腹いっぱい。
2012/05/25(金) 17:40:27.35# bash -x secrets.sh
secrets.sh: line 2: syntax error near unexpected token `do'
secrets.sh: line 2: `do bin2xml $x.folder/AndroidManifest.xml
> $x.folder/AndroidManifest.decoded.xmldonefor x in `find . -name "AndroidManifest.decoded.xml"`do
echo "$x:" >> output.txt cat $x | grep -i host | sed 's/android:host=\"/*#*#/' | sed 's/\" \/>/#*#*/' | sed 's/\t\t\t\t\t//' >> output.txtdone'
0875名無しさん@お腹いっぱい。
2012/05/25(金) 17:49:44.95改行まで消すなよ。
bin2xmlの行が2行目に来てるし、、
0876名無しさん@お腹いっぱい。
2012/05/25(金) 17:57:33.97# hexdump -c secrets.sh | head
0000000 # ! / b i n / b a s h \r \n e c h
0000010 o - n > a p k s . t x t \r
0000020 \n e c h o - n > o u t p u
0000030 t . t x t \r \n f o r x i n
0000040 ` f i n d . - n a m e " *
0000050 . a p k " ` \r \n d o \r \n \t u n z
0000060 i p - p $ x | s t r i n
0000070 g s | g r e p - i " a n
0000080 d r o i d . p r o v i d e r . T
0000090 e l e p h o n y . S E C R E T _
0877名無しさん@お腹いっぱい。
2012/05/25(金) 18:04:28.73コマンド行のコピペのまともに出来ない人間が、
xda-developers.comなんかに手を出さないほうがいいよ。
コンピュータは向いてない。
0878名無しさん@お腹いっぱい。
2012/05/25(金) 18:19:40.540879名無しさん@お腹いっぱい。
2012/05/25(金) 18:25:56.14それと簡単なシェルスクリプトを動かしたら似たようなエラーが発生しました。
# bash test.sh aaa
: command not found
: command not found
test.sh: line 12: syntax error near unexpected token `fi'
test.sh: line 12: `fi'
0880名無しさん@お腹いっぱい。
2012/05/25(金) 18:29:43.74>>876が発狂する前に hexdump -C secrets.sh | head の出力を貼ってください
-cじゃなくて-Cでお願いします
0882名無しさん@お腹いっぱい。
2012/05/25(金) 18:38:20.98原因は出てる通り CR
で、CR取れと指示されたら CRを知らない質問者が CR LFともに取って1行にしただけ。
エラーメッセージからも裏付けられる。
0883名無しさん@お腹いっぱい。
2012/05/25(金) 18:40:31.8500000000 23 21 2f 62 69 6e 2f 62 61 73 68 0d 0a 65 63 68 |#!/bin/bash..ech|
00000010 6f 20 2d 6e 20 3e 20 61 70 6b 73 2e 74 78 74 0d |o -n > apks.txt.|
00000020 0a 65 63 68 6f 20 2d 6e 20 3e 20 6f 75 74 70 75 |.echo -n > outpu|
00000030 74 2e 74 78 74 0d 0a 66 6f 72 20 78 20 69 6e 20 |t.txt..for x in |
00000040 60 66 69 6e 64 20 2e 20 2d 6e 61 6d 65 20 22 2a |`find . -name "*|
00000050 2e 61 70 6b 22 60 0d 0a 64 6f 0d 0a 09 75 6e 7a |.apk"`..do...unz|
00000060 69 70 20 2d 70 20 24 78 20 7c 20 73 74 72 69 6e |ip -p $x | strin|
00000070 67 73 20 7c 20 67 72 65 70 20 2d 69 20 22 61 6e |gs | grep -i "an|
00000080 64 72 6f 69 64 2e 70 72 6f 76 69 64 65 72 2e 54 |droid.provider.T|
00000090 65 6c 65 70 68 6f 6e 79 2e 53 45 43 52 45 54 5f |elephony.SECRET_|
000000a0 43 4f 44 45 22 0d 0a 09 69 66 20 5b 20 24 3f 20 |CODE"...if [ $? |
000000b0 2d 65 71 20 30 20 5d 3b 20 74 68 65 6e 0d 0a 09 |-eq 0 ]; then...|
000000c0 09 65 63 68 6f 20 24 78 20 3e 3e 20 61 70 6b 73 |.echo $x >> apks|
000000d0 2e 74 78 74 0d 0a 09 66 69 0d 0a 64 6f 6e 65 0d |.txt...fi..done.|
000000e0 0a 66 6f 72 20 78 20 69 6e 20 60 63 61 74 20 61 |.for x in `cat a|
000000f0 70 6b 73 2e 74 78 74 60 0d 0a 64 6f 0d 0a 09 6d |pks.txt`..do...m|
00000100 6b 64 69 72 20 22 24 78 2e 66 6f 6c 64 65 72 22 |kdir "$x.folder"|
00000110 0d 0a 09 6d 76 20 24 78 20 24 78 2e 66 6f 6c 64 |...mv $x $x.fold|
00000120 65 72 0d 0a 64 6f 6e 65 0d 0a 66 6f 72 20 78 20 |er..done..for x |
00000130 69 6e 20 60 63 61 74 20 61 70 6b 73 2e 74 78 74 |in `cat apks.txt|
00000140 60 0d 0a 64 6f 0d 0a 09 75 6e 7a 69 70 20 2d 64 |`..do...unzip -d|
00000150 20 24 78 2e 66 6f 6c 64 65 72 20 24 78 2e 66 6f | $x.folder $x.fo|
0884名無しさん@お腹いっぱい。
2012/05/25(金) 19:00:58.48ありがとうございます。
まさにその通りでした。
一応走り出したんですが
# bash secrets.sh
unzip: can't open as, as.zip, as.ZIP
unzip: can't open an, an.zip, an.ZIP
unzip: can't open Droid.apk, Droid.apk.zip, Droid.apk.ZIP
unzip: zip flags 1 and 8 are not supported
unzip: zip flags 1 and 8 are not supported
unzip: zip flags 1 and 8 are not supported
unzip: zip flags 1 and 8 are not supported
unzip: zip flags 1 and 8 are not supported
unzip: zip flags 1 and 8 are not supported
unzip: can't open as, as.zip, as.ZIP
unzip: can't open an, an.zip, an.ZIP
unzip: can't open Droid.apk, Droid.apk.zip, Droid.apk.ZIP
とエラーを延々と吐かれました。
0885発狂寸前のなまはげ
2012/05/25(金) 21:21:23.68cygwinのまともなunzipはどこかにおらんかー!?
0886名無しさん@お腹いっぱい。
2012/05/26(土) 15:38:08.10find "${DIR}/A/" -name '*.png' -printf "$(tput bold; tput setaf 6) %f $(tput sgr0)"
find "${DIR}/B/" -name '*.png' -printf "$(tput bold; tput setaf 5) %f $(tput sgr0)"
find "${DIR2}/" -prune -name '*.png' -printf "$(tput bold; tput setaf 5) %f $(tput sgr0)"
とあるディレクトリ内にある画像ファイルをディレクトリ別に色違いで表示させたいです。
似たような単作業なのでどうにかこれを簡略化したいのですが、どうすればいいでしょうか?
0887名無しさん@お腹いっぱい。
2012/05/26(土) 17:02:55.22-pathオプションを使う。
find "$DIR" "$DIR2" \
\( -path "$DIR/A/*.png" -printf "$(tput bold; tput setaf 6) %f $(tput sgr0)" \) \
-o \( -path "$DIR/B/*.png" -printf "$(tput bold; tput setaf 5) %f $(tput sgr0)" \) \
-o \( -path "$DIR/*.png" -printf "$(tput bold; tput setaf 1) %f $(tput sgr0)" \) \
-o \( -path "$DIR2/*.png" -printf "$(tput bold; tput setaf 5) %f $(tput sgr0)" \)
OR条件の判断上、-path "$DIR/A/*.png" 等を -path "$DIR/*.png" よりも先にすること。
0888名無しさん@お腹いっぱい。
2012/05/26(土) 21:15:22.85どうせなら最初と最後にtputをまとめればもう少し簡単に
tput bold
find "$DIR" "$DIR2" \
\( -path "$DIR/A/*.png" -printf "$(tput setaf 6) %f " \) \
-o \( -path "$DIR/B/*.png" -printf "$(tput setaf 5) %f " \) \
-o \( -path "$DIR/*.png" -printf "$(tput setaf 1) %f " \) \
-o \( -path "$DIR2/*.png" -printf "$(tput setaf 5) %f " \)
tput sgr0
0889名無しさん@お腹いっぱい。
2012/05/27(日) 10:29:12.14シェルスクリプトに
echo cmd
とかいて有った場合、そのコマンドが実行される条件って有るのでしょうか?
sh /etc/weekly.local
とやると、weekly.local内の
#!/bin/sh -
cd /
echo ""; echo "Rebuilding locate database:"
echo /usr/libexec/locate.updatedb | nice -5 su -m nobody 2>/dev/null
が実行されますが、
vi hoge.sh
#!/bin/sh
cd /
echo /usr/bin/ls
と書いて、実行権限も付けた後、
sh hoge.shとやっても
/usr/bin/ls
としか表示されませんでした。
lsが実行される事を期待したのですが...
0890名無しさん@お腹いっぱい。
2012/05/27(日) 10:56:49.10echoの出力をパイプで suに食わせているから結果的に echoの内容が実行される。
同じことをやりたいなら、
echo /usr/bin/ls | sh
だな。
ところでlsが/usr/binにあるって、、Solarisかよ。
0891名無しさん@お腹いっぱい。
2012/05/27(日) 13:02:22.30ありがとうございました!
0892名無しさん@お腹いっぱい。
2012/05/28(月) 04:48:06.45探してもcatでの例しかない
どなたか有効な使い方教えてくれませんか?
0893名無しさん@お腹いっぱい。
2012/05/28(月) 06:31:40.480894名無しさん@お腹いっぱい。
2012/05/28(月) 07:42:53.98過去の使い方でもいいので出来れば教えていただけませんか?
0895名無しさん@お腹いっぱい。
2012/05/28(月) 08:17:23.20xmodmap を実行するのにファイルを用意せずに実行する例。
xmodmap - <<EOF
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
EOF
0896名無しさん@お腹いっぱい。
2012/05/28(月) 08:20:13.78それは echoでできるので、ヒアドキュメントの有効な使い方じゃないですね。
echo 'remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L' | xmodmap -
0897名無しさん@お腹いっぱい。
2012/05/28(月) 09:29:22.95結局のところ標準入力にデータを流しこむ手段のひとつでしかないんだから、
基本的に echo や cat と変わらん。
「それは echo でできる」と言うのならぜんぶ echo でやればいいんじゃねーの?
↓は動かないけど、
date +'%Y %m %d' | read y m d
ヒアドキュメントを使った↓は動く。
read y m d<<eod
`date +'%Y %m %d'`
eod
違いなんてこの程度のものだ。
# ksh は前者も動く。
0898名無しさん@お腹いっぱい。
2012/05/28(月) 09:38:26.36それはヒヤドキュよりもeval使った方が簡単だな。
eval `date +'y=%Y m=%m d=%d'`
0899名無しさん@お腹いっぱい。
2012/05/28(月) 10:39:52.020900名無しさん@お腹いっぱい。
2012/05/28(月) 16:14:29.700901名無しさん@お腹いっぱい。
2012/05/28(月) 18:48:35.50大昔のUNIX プログラミング環境って本にはそんな感じで書いてあった記憶が。カーニハンとロブパイクのやつね。
0902名無しさん@お腹いっぱい。
2012/05/29(火) 00:24:27.940903名無しさん@お腹いっぱい。
2012/05/29(火) 06:38:30.30複数のスクリプトをひとまとめにして、メールで送る。受け取った側で実行すると複数のファイルの出来上がり。
cat <<EOF >file1
hogehoge
hogehoge
EOF
cat <<EOF >file2
fugafuga
fugafuga
EOF
0904名無しさん@お腹いっぱい。
2012/05/29(火) 08:20:04.290905名無しさん@お腹いっぱい。
2012/05/29(火) 09:44:38.22クォートを考える必要がある場合、パイプを避ける場合ですね。
ftp << EOF
yum install $1 << CONFIRM
wall <<
vi <<
一時ファイル作りますから完成時には消しますが、ブロックコメントは便利です。
: <<'#COMMENTBLOCK'
あと
exec 3<<EOF
`${command}`
EOF
としておいて、別のところで
while read line; do; done 0<&3 3<&-
>>900 ですよね。
sh -c 'lsof -a -p $$ -d0' << EOF
0906名無しさん@お腹いっぱい。
2012/05/29(火) 11:43:40.34変数の展開はしてくれるんで、別ファイルにするより便利な場面は多々ある。
0907名無しさん@お腹いっぱい。
2012/05/29(火) 17:11:18.160908名無しさん@お腹いっぱい。
2012/05/29(火) 18:26:47.270909名無しさん@お腹いっぱい。
2012/05/29(火) 18:50:14.82http://en.wikipedia.org/wiki/Shar
0910名無しさん@お腹いっぱい。
2012/05/29(火) 19:11:23.55初めて見た書式なんだけどこれってどういう意味なんです?
0911名無しさん@お腹いっぱい。
2012/05/29(火) 19:14:53.89http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbBB
PIDFILE が設定されてないときは /var/run/example.pid を使う。
0912名無しさん@お腹いっぱい。
2012/05/29(火) 19:15:07.87変数PIDFILEを展開するが、もしセットされてなかった場合はデフォルトとして /var/run/example.pid を用いる。
それを pidfileという変数に代入している。
0913名無しさん@お腹いっぱい。
2012/05/29(火) 19:19:25.84$ PAGER='less -p:-' man sh
ちゃんと man に書いてはあるんだけど、
${parameter-word} そのものについては書いてなくて、
${parameter:-word} の説明とはちょっと離れたところに
: を省略した場合の動作が書いてあるんだよな。すげー探しづらい。
0914名無しさん@お腹いっぱい。
2012/05/29(火) 19:20:14.34サンクス!
勉強になりますた!
0915905
2012/05/29(火) 20:59:15.91while read line; do; done 0<&3 3<&-
でなく、
while read line; do; done 0<&3
exec 3<&-
0916名無しさん@お腹いっぱい。
2012/05/29(火) 21:09:48.080917名無しさん@お腹いっぱい。
2012/05/29(火) 21:58:40.26今はステマ用の単語でしか検索できない。
0918名無しさん@お腹いっぱい。
2012/05/30(水) 00:16:57.10以下のような文字列があります。
文字列を見ていき、文字「@」のある無しを配列に入れていきたいのですが、何かいい方法はないでしょうか。
・文字列
「△@△@△@△@△@△△@△」
空白(△)は文字「@」の前後に一つずつ入っています。
ただし、稀に連続で出現する場合があります。
?バイト目での「@」の出現有無を配列に格納したいです。
set -A ARRY △@△@△@△@△@△△@△
echo ${ARRY[11]}の結果で△を返したいのですが、
思い通りになりません。。。
シェルはkshです。よろしくお願いします。
0919名無しさん@お腹いっぱい。
2012/05/30(水) 03:18:00.71あるシェルスクリプトの中に、
rm -rf -- *;
という一文が有ったのですが、
--はどういう意味が有るのでしょうか?
0920名無しさん@お腹いっぱい。
2012/05/30(水) 07:34:45.47-で始まるファイルも消すためのオプション
0921名無しさん@お腹いっぱい。
2012/05/30(水) 08:19:35.68正確にはオプションの終わりを明示する為のものなんだけど、rmの場合は*が展開された時に-から始まるファイル名をオプションと認識しないことになるから、>>920のようにはたらく。
0922名無しさん@お腹いっぱい。
2012/05/30(水) 09:51:48.12バックグラウンドで実行させる為に以下のように書きましたが
service prog start で待機状態?になってしまいうまくいきません
daemon --pidfile=${pidfile} ${prog} ${conf} &
このようなケースではどういう風に書けばよいのでしょうか?
0923名無しさん@お腹いっぱい。
2012/05/30(水) 09:56:58.28daemon(シェル関数) 通す場合は & は要らん。
& なしで勝手に(制御端末切り離して)バックグラウンドになる。
逆に & 付けると動作がおかしくなるかも。
0924名無しさん@お腹いっぱい。
2012/05/30(水) 09:58:17.450925名無しさん@お腹いっぱい。
2012/05/30(水) 10:05:26.81man rm に載ってなかった?
0926名無しさん@お腹いっぱい。
2012/05/30(水) 10:15:58.35むむむ、それが&を抜いても制御が戻らないんです…
んー、なんでだろう
0927名無しさん@お腹いっぱい。
2012/05/30(水) 16:05:48.60その2で、sed使わないで置換できたら面白かったけど。2ch仕様の為、空白を・にしてます。
#!/bin/ksh
strings="${1:-・@・@・@・@・@・・@・}"
function・kekka・{
・・・for・((・n・=・0;・n・<・${#ARRY[@]};・n++・))・;・do
・・・・・・echo・-n・"配列${n}=${ARRY[$n]}・"
・・・done
・・・echo
}
#その1
for・((・n・=・0;・n・<・"${#strings}";・n++・))・;・do
・・・ARRY[$n]="${strings:$n:1}"
done
kekka;・echo
#その2
bufIFS=${IFS};・IFS=,
set・-A・ARRY・$(・echo・"${strings}"・|・sed・-e・'s/./&,/g'・)
IFS=${bufIFS}
kekka
0928927
2012/05/30(水) 19:17:37.42set -A ARRY ${strings//?/${.sh.match[0]},}
IFS=${bufIFS}
0929名無しさん@お腹いっぱい。
2012/05/30(水) 21:04:15.72顔文字がいっぱい。
0930名無しさん@お腹いっぱい。
2012/05/30(水) 21:55:29.14>>921
>>925
なるほど
-fというファイルが有った場合、
rm -fだと消せないので
rm -- -fとやるんですね。
0931927
2012/05/30(水) 22:47:57.45bash様で書けるのかと聞きたい。
+・)) kshすてき?
0932918
2012/05/30(水) 23:16:46.44それです!今試したらやりたいことが出来ました。
初見の機能ばかりで、いまいち詳細はよくわかってませんが^^;
シェルを見ながら使い方を覚えてみます。ありがとうございました。
0933名無しさん@お腹いっぱい。
2012/05/31(木) 02:15:46.91(cd $HOME/makedir; make)
の()は前後に空白を入れたり、;を最後のコマンドに入れたりしなくていいそうです。
{ command1; command2; .....; }
の{}は前後に空白を入れなければならないし、;を最後に入れないと行けないそうです。
なんででしょうか?
0934名無しさん@お腹いっぱい。
2012/05/31(木) 06:07:47.35{と}自体がコマンドだから。
0935名無しさん@お腹いっぱい。
2012/05/31(木) 07:20:21.59type { してみ。
0936名無しさん@お腹いっぱい。
2012/05/31(木) 10:40:58.430937名無しさん@お腹いっぱい。
2012/05/31(木) 10:47:30.140938名無しさん@お腹いっぱい。
2012/05/31(木) 11:21:46.530939933
2012/05/31(木) 22:58:07.09} is a shell keyword
type [
[ is a shell builtin
と出ました。
{ } がコマンドに近いもので、
()が文法に近いものという事はわかったのですが、
shell keywordとshell builtinって何が違うのでしょうか?
0940名無しさん@お腹いっぱい。
2012/05/31(木) 23:07:32.14コマンドだから行末もしくは ; の前までで一区切り。
shell keyword は行末とか ; を越えて働く。
0941934
2012/06/01(金) 07:49:01.20かわいそうになって来た。
これ読んでこい。
bash.cyberciti.biz/guide/Shell_commands
0942名無しさん@お腹いっぱい。
2012/06/01(金) 07:58:45.70>>941
リンク切れてた
tldp.org/LDP/abs/html/internal.html
0943名無しさん@お腹いっぱい。
2012/06/03(日) 22:27:24.72どういった動きをするんですかね?
0944名無しさん@お腹いっぱい。
2012/06/04(月) 06:49:51.27printenv HOGE HOGE=boke
みたいなことができる。
0945発狂寸前のなまはげ
2012/06/04(月) 09:34:49.32$ set -k
$ printenv HOGE HOGE=boke
boke
0946名無しさん@お腹いっぱい。
2012/06/04(月) 11:26:05.970947名無しさん@お腹いっぱい。
2012/06/04(月) 13:41:09.37>>945
0948名無しさん@お腹いっぱい。
2012/06/04(月) 13:51:59.430949名無しさん@お腹いっぱい。
2012/06/04(月) 13:57:59.74Illegal option -k
0950名無しさん@お腹いっぱい。
2012/06/04(月) 14:44:36.11これがあるとどんなときに嬉しいんだろ?
awk -v var=value ... というコマンドが実行できなくなるとか
デメリットしか思い浮かばないんだけど。
HOGE=fuga command という構文なんぞいらん、
必要なら env HOGE=fuga command でいいじゃねーか、と思ってるぐらいなのに、
さらに拡張する意義がさっぱりわからん。
0951名無しさん@お腹いっぱい。
2012/06/04(月) 17:27:54.381. まず、マニュアルを見る。もし環境変数について分からなければ、それも調べる。
bashで分からなければ、kshのマニュアルが分かりやすい。 http://uw714doc.sco.com/ja/man/html.1/ksh.1.html
> 旧式の -k オプションが設定されていると、....
2. set -k と、 set +k について試す。
$ echo a=b c
$ sh -c a=UNIX 'echo $a MAGAZINE'
>> 950 少なくとも、UNIX Version 7 の Bourne からあるようだ。Thompson shellは-t -cのみ。
http://www.tuhs.org/
>> 949 の sh は、Bourne Shell でなく、ash か dash じゃないか?
0952名無しさん@お腹いっぱい。
2012/06/06(水) 22:40:34.04既存のシェルスクリプトの動作内容の説明が課題になっているのですが
習い始めでコマンドすらまともに分からない状態なので、何が何やらさっぱりです
PCすらそんな使わないので、マニュアルみながらでも頭が弾けそうです・・
ここで質問すれば答えてもらえるでしょうか?殆ど丸投げになりそうですが。。
時間があれば1つ1つ学びながら進めたいんですが、何せ時間がないもんで;;
0953名無しさん@お腹いっぱい。
2012/06/06(水) 22:47:06.800954名無しさん@お腹いっぱい。
2012/06/06(水) 22:56:57.23お節介な誰かが課題解いてくれるっしょ
レス数が950を超えています。1000を超えると書き込みができなくなります。