シェルスクリプト総合 その19
レス数が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 で。
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お節介な誰かが課題解いてくれるっしょ
0955名無しさん@お腹いっぱい。
2012/06/06(水) 23:04:45.370956名無しさん@お腹いっぱい。
2012/06/06(水) 23:22:53.72いや>>939辺りからの流れ見てると
その答えが自分には答えになって無いほど難しく
自分の無知さで質問したら怒られそうだったので・・
0957名無しさん@お腹いっぱい。
2012/06/06(水) 23:25:33.740959名無しさん@お腹いっぱい。
2012/06/06(水) 23:41:54.35report6.tex から report6.dvi を作成する.
report6.dvi から report6.pdf を作成する.
xdvi により report6.dvi の内容を表示する.
report6.tex, report6.dvi, report6.pdfの各ファイルサイズを出力する。
というものです;;まだまだ動作説明とか沢山あるのに
オンラインマニュアルを参照しつつ3時間ほど悪戦苦闘しましたが
1つも進まず、正直泣きたい気分です。。。
既存のシェルは文長くなりすぎて書き込めませんが
0960名無しさん@お腹いっぱい。
2012/06/06(水) 23:48:43.77makeかomakeあたりで書くところだろという突っ込みはなし?
0961名無しさん@お腹いっぱい。
2012/06/06(水) 23:54:29.88dvipdfmx report6.dvi
xdvi report6.dvi
wc -c report6.tex, report6.dvi, report6.pdf
0962名無しさん@お腹いっぱい。
2012/06/07(木) 00:10:59.080963名無しさん@お腹いっぱい。
2012/06/07(木) 00:14:59.00本当にありがとう御座います。
それだけの物でもマニャアル読みながらだと中々書けない
以下の様なスクリプトの動作説明が8つぐらいあるのすが
#!/bin/sh
# remember - an easy command-line based memory pad
# search the results with 'remindme'
rememberfile="$HOME/.remember"
if [ $# -eq 0 ] ; then
echo "Enter note, end with ^D "
#ヒント:下記の cat の入力は標準入力です。入力の終了は空行で ^D を押します
cat - >> $rememberfile
else
echo "$@" >> $rememberfile
fi
人に聞かずにやるには限界です。。1歩も前に進まない。。
0964749
2012/06/07(木) 00:26:41.76動作説明ってこんな感じでいいのか?
>#!/bin/sh
>
># remember - an easy command-line based memory pad
># search the results with 'remindme'
>
>rememberfile="$HOME/.remember"
ファイル指定
>
>if [ $# -eq 0 ] ; then
引数がなければ
>echo "Enter note, end with ^D "
""内の文字列を表示
>#ヒント:下記の cat の入力は標準入力です。入力の終了は空行で ^D を押します
>cat - >> $rememberfile
キー入力を$HOME/.rememberに書き込み
>else
引数があれば
>echo "$@" >> $rememberfile
引数全体を$HOME/.rememberに書き込み
>fi
0965名無しさん@お腹いっぱい。
2012/06/07(木) 00:47:25.54正にその通りです。後4つが分かれば残りはそれらを参照すれば出来るそうですのでお願いします.
#!/bin/sh
# formatdir - output a directory listing
for file in *
do
if [ -d "$file" ]
then
size=`ls -1 "$file" | wc -l | sed 's/ //g'`
if [ $size -eq 1 ]
then
echo "$file ($size entry)"
else
echo "$file ($size entries)"
fi
else
size=`ls -l "$file" | sed 's/^[^ ]*[ ]*[^ ]*[ ]*[^ ]*[ ]*[^ ]*[ ]*\([0-9]*\)[^0-9].*/\1/'`
echo "$file ($size byte)"
fi
done
0966名無しさん@お腹いっぱい。
2012/06/07(木) 00:48:39.60# checkspelling - check the spelling of a word
spell="ispell -l" # if you have ispell installed instead
# if not, just define spell=spell or
# equivalent.
# ヒント
# "ispell -l" は標準入力から入力された単語(複数)から
# スペルの間違っている単語だけを出力します。
if [ $# -lt 1 ] ; then
echo "Usage: $0 word or words" >&2
exit 1
fi
for word in $*
do
test=`echo $word | $spell`
if [ -z "$test" ] ; then
echo "$word: spelled correctly."
else
echo "$word: misspelled."
fi
done
0967名無しさん@お腹いっぱい。
2012/06/07(木) 00:50:16.01# hilow - a simple number guessing game
biggest=100 # maximum number possible
guess=0 # guessed by player
guesses=0 # number of guesses made
number=`expr $$ % $biggest` # 1 から $biggest の間の乱数を生成
while [ $guess -ne $number ]
do
echo "Guess? "
read guess # read guess で guess 変数にキーボードから入力した値が入る
if [ $guess -lt $number ]
then
echo "... bigger!"
elif [ $guess -gt $number ]
then
echo "... smaller!"
fi
guesses=`expr $guesses + 1` # guesses の値を1増やしている
done
echo "Right!! Guessed $number in $guesses guesses."
0968名無しさん@お腹いっぱい。
2012/06/07(木) 00:50:59.66# remindme - search a datafile for matching lines, or show the contents
# of the datafile if no arg is specified
rememberfile="$HOME/.remember"
if [ $# -eq 0 ] ; then
less $rememberfile
else
grep -i "$@" $rememberfile | less
fi
0969名無しさん@お腹いっぱい。
2012/06/07(木) 01:06:04.28>for file in *
カレントディレクトリ内のすべてのファイル名、ディレクトリ名について繰り返し。fileには作業対象ファイル(ディレクトリ)名が入る。
>do
>if [ -d "$file" ]
$fileがディレクトリなら
>then
>size=`ls -1 "$file" | wc -l | sed 's/ //g'`
ディレクトリ内のファイル数を数える。
>if [ $size -eq 1 ]
ファイル数が1なら
>then
>echo "$file ($size entry)"
単数形で表示
>else
ファイルが複数あれば
>echo "$file ($size entries)"
複数形で表示
>fi
>else
ディレクトリじゃなければ
>size=`ls -l "$file" | sed 's/^[^ ]*[ ]*[^ ]*[ ]*[^ ]*[ ]*[^ ]*[ ]*\([0-9]*\)[^0-9].*/\1/'`
サイズの部分を切り出して
>echo "$file ($size byte)"
表示
>fi
>done
0970名無しさん@お腹いっぱい。
2012/06/07(木) 01:15:11.97>>965
018-formatdir.sh
>>966
025-checkspelling.sh
>>967
013-hilow.sh
>>968
023-remindme.sh
0971名無しさん@お腹いっぱい。
2012/06/07(木) 01:15:32.670972970
2012/06/07(木) 01:17:17.490973名無しさん@お腹いっぱい。
2012/06/07(木) 01:17:55.21>spell="ispell -l" # if you have ispell installed instead
スペルチェックに使うコマンドの指定。
># if not, just define spell=spell or
># equivalent.
>
>if [ $# -lt 1 ] ; then
引数の数が1より小さければ
>echo "Usage: $0 word or words" >&2
標準エラー出力に表示
>exit 1
スクリプト終了、終了コード1
>fi
>
>for word in $*
すべての引数について繰り返し
>do
>test=`echo $word | $spell`
$wordをspellに渡して
>if [ -z "$test" ] ; then
spellの結果が0文字なら
>echo "$word: spelled correctly."
スペルミスしてない
>else
スペルミスがあれば
>echo "$word: misspelled."
スペルミスしてるよ。
>fi
>done
0974名無しさん@お腹いっぱい。
2012/06/07(木) 01:23:30.94仰る通りです。。
このままではいけないのでこのような質問の仕方は今回限りにします
0975名無しさん@お腹いっぱい。
2012/06/07(木) 01:34:55.83>>968
>#!/bin/sh
>
># remindme - search a datafile for matching lines, or show the contents
># of the datafile if no arg is specified
>
>rememberfile="$HOME/.remember"
>
>if [ $# -eq 0 ] ; then
引数がなければ
>less $rememberfile
$rememberfileをそのまま表示
>else
引数があれば
>grep -i "$@" $rememberfile | less
引数で検索して表示
>fi
0976名無しさん@お腹いっぱい。
2012/06/07(木) 01:35:39.56ホントだ。。。
完全にココのコピペですね;;すげぇ
まぁ動作の解読が必要な事は変わりなさそうですね・・
0977名無しさん@お腹いっぱい。
2012/06/07(木) 08:06:36.420978名無しさん@お腹いっぱい。
2012/06/07(木) 08:16:19.330979名無しさん@お腹いっぱい。
2012/06/07(木) 11:46:48.750980名無しさん@お腹いっぱい。
2012/06/07(木) 11:48:46.00使い慣れたエディタで書けばいい。
0981名無しさん@お腹いっぱい。
2012/06/07(木) 12:03:36.22簡単な文法チェックもできるエディタ限定でお願いします
0982名無しさん@お腹いっぱい。
2012/06/07(木) 12:38:03.05秀丸使ったことないけど具体的にどんなところがいいの?
vimと比較したいです。
0983名無しさん@お腹いっぱい。
2012/06/07(木) 13:24:38.07キーバインドが標準的
文法チェックが出来る
インデントも正しく出来る
0984名無しさん@お腹いっぱい。
2012/06/07(木) 18:46:33.020985名無しさん@お腹いっぱい。
2012/06/07(木) 20:33:24.170986名無しさん@お腹いっぱい。
2012/06/07(木) 21:08:20.474200円っていう価格設定と実質日本人しか使ってないってのは痛い
0987名無しさん@お腹いっぱい。
2012/06/07(木) 22:46:48.130988名無しさん@お腹いっぱい。
2012/06/07(木) 22:58:20.08母数が3桁は違うだろ…現実みようぜ…
0989名無しさん@お腹いっぱい。
2012/06/07(木) 23:22:06.040990名無しさん@お腹いっぱい。
2012/06/07(木) 23:27:56.11>1
0991名無しさん@お腹いっぱい。
2012/06/07(木) 23:38:34.250993名無しさん@お腹いっぱい。
2012/06/07(木) 23:53:51.080994名無しさん@お腹いっぱい。
2012/06/08(金) 00:36:39.22シェルスクリプト総合 その20
http://toro.2ch.net/test/read.cgi/unix/1339083351/
0996名無しさん@お腹いっぱい。
2012/06/08(金) 06:30:13.260997名無しさん@お腹いっぱい。
2012/06/08(金) 09:49:09.320998名無しさん@お腹いっぱい。
2012/06/08(金) 09:49:49.790999名無しさん@お腹いっぱい。
2012/06/08(金) 12:17:47.62俺秀丸使いだよ
1000名無しさん@お腹いっぱい。
2012/06/08(金) 12:18:03.1910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。