[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 21:40 / Filesize : 275 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part3



1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

【sed】シェルスクリプト総合@LINUX Part2【awk】
pc11.2ch.net/test/read.cgi/linux/1154578200/
pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。


919 名前:login:Penguin mailto:sage [2008/04/11(金) 16:38:37 ID:3vnovWPW]
>>918
めちゃくちゃありがとうございます!!!

920 名前:login:Penguin mailto:sage [2008/04/11(金) 16:41:55 ID:h4xwic1O]
最近の bash なら
echo 00{0..9} 0{10..99} {100..999}

zsh なら
echo {000..999}

921 名前:login:Penguin mailto:sage [2008/04/13(日) 00:08:59 ID:C50QhsEF]
端末に他の端末から書き込むようなデーモンとクライアントが欲しいです
例として、mltermとurxvtを立ちあげ、
mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら
mltermの画面にaaaとか表示されるようなものです
同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…

922 名前:login:Penguin mailto:sage [2008/04/13(日) 00:37:03 ID:tBy+WuAg]
適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば

923 名前:login:Penguin mailto:sage [2008/04/13(日) 08:41:28 ID:LTuSsBD0]
端末A $ echo 'term A' > /dev/console
端末B $ echo 'term B' > /dev/console
に類したことは、まれにやる。

924 名前:login:Penguin mailto:sage [2008/04/13(日) 09:11:42 ID:DHms7wov]
>>921
mlterm$ screen

urxvt$ screen -x

925 名前:login:Penguin mailto:sage [2008/04/13(日) 09:16:44 ID:DHms7wov]
つ ttysnoop


926 名前:login:Penguin mailto:sage [2008/04/13(日) 10:23:50 ID:+bcR3tRW]
>>921
wall

927 名前:login:Penguin mailto:sage [2008/04/13(日) 15:29:10 ID:7nxEkg5V]
>>924
それは違うんじゃね?



928 名前:login:Penguin mailto:sage [2008/04/14(月) 21:52:01 ID:yIAGZ+M9]
rm -rf /*


┐('〜`;)┌ モウツカレタ

929 名前:login:Penguin mailto:sage [2008/04/15(火) 07:03:22 ID:KF+FiULr]
dd if=/dev/zero of=/dev/hda

930 名前:login:Penguin mailto:sage [2008/04/18(金) 07:50:33 ID:9axeonkq]
運用しているマシンでちょっとした作業を行うとき、
nice bash したシェルで作業することがあるのですが、
いま自分が動かしているシェルの nice 値を簡単に
知る方法ってないですかね・・・

931 名前:login:Penguin mailto:sage [2008/04/18(金) 08:23:44 ID:JZJIXmIH]
$ ps -o %n $$

そんなことも知らない人がniceするの?
それに対話型のコマンドにniceはあまり意味がない。

932 名前:login:Penguin mailto:sage [2008/04/18(金) 09:08:39 ID:9axeonkq]
その中でmakeしまくるので

933 名前:login:Penguin mailto:sage [2008/04/18(金) 09:57:57 ID:JZJIXmIH]
alias make='nice --adjustment=-30 make'

934 名前:login:Penguin mailto:sage [2008/04/18(金) 11:45:33 ID:u356hJZU]
reniceじゃダメなんでしょうか?

935 名前:login:Penguin mailto:sage [2008/04/18(金) 20:06:00 ID:xUbq9+ce]
alias nice='ジャズ + クラシック / ロック'

936 名前:login:Penguin mailto:sage [2008/04/18(金) 23:11:33 ID:cOa8NbkQ]
nice boat.

937 名前:login:Penguin [2008/04/19(土) 13:43:25 ID:khf4hkQE]
>>934
>reniceじゃダメなんでしょうか?

topでもいいよな。




938 名前:login:Penguin [2008/04/19(土) 16:17:44 ID:SCXXqtIf]
bashのシェルスクリプトで、
文字列に正規表現のフィルタをかけたいのですが
以下の場合、なぜエラーになるかわかりません。
何が悪いですか?

expr `ps` : ".*"
-> expr: syntax error

var1="aaa"
expr $var1 : ".*"
-> expr: syntax error

939 名前:login:Penguin mailto:sage [2008/04/19(土) 18:02:41 ID:XPjpMm+j]
expr "`ps`" : ".*"

var1="aaa"
expr "$var1" : ".*"

940 名前:login:Penguin [2008/04/19(土) 20:46:24 ID:SCXXqtIf]
>>939
それで出来ました。ありがとうございます。
でも理由がいまいちわかりません。

” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?


941 名前:login:Penguin mailto:sage [2008/04/19(土) 21:02:50 ID:SyasDtFa]
hdやbdみたいに 2進数表示するプログラムありませんか?

942 名前:login:Penguin mailto:sage [2008/04/19(土) 22:41:34 ID:QZlXANdf]
>>941
od

943 名前:login:Penguin mailto:sage [2008/04/19(土) 22:50:17 ID:SyasDtFa]
odだと2進数は表示ですう。
もう自分で作っちゃいました・

944 名前:login:Penguin [2008/04/20(日) 10:43:22 ID:C3cqRfnQ]
>>940

>” ”で囲っていない為 → 文字列型ではない為 → では$va
>r1は何を返すのか?

確かに、おれも気になるぞ


945 名前:login:Penguin mailto:sage [2008/04/20(日) 13:49:25 ID:yhaYk8sL]
なんというか、このスレで話をするための最低限の知識レベルを、>>940や941は遥かに割り込んでいる気がするんだが。

946 名前:login:Penguin [2008/04/20(日) 14:55:30 ID:3JVOMAOF]
>>938は、自分なりに考えた結果、以下のような結論になりました。

シェルスクリプトは、型だのなんだのはなくて
C言語でいう単純なマクロの展開レベルのものしかしない。


例えば、先の例だと、
expr `ps` : ".*"

expr PID TTY TIME CMD
2295 pts/1 00:00:00 bash
2407 pts/1 00:00:00 ps : '.*'

シンタックスエラーでNG


""で囲うと、
expr "`ps`" : ".*"

expr 'PID TTY TIME CMD
2295 pts/1 00:00:00 bash
2407 pts/1 00:00:00 ps' : '.*'

OK

「echo "aaa " `ps`」が通るんで矛盾しているなぁと思っていたんですが
よく考えるとそんなことは無かったですね。

947 名前:login:Penguin mailto:sage [2008/04/20(日) 17:11:52 ID:oNW0JD98]
逆に文字列処理を一通りしてから実行させられるから、
>>938が最初考えていたみたいに単語区切りが強い場合より、
出来ることが増えるんだけどな。
その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。



948 名前:login:Penguin mailto:sage [2008/04/23(水) 22:57:21 ID:xEICV4cP]
grepの結果で AAAとBBBのOR検索をしたいのですが、

tail -f /var/log/maillog | grep [AAA|BBB]
とやってもだめでしたorz

どうすれば、OR検索ができるのでしょうか?
ANDは、パイプで追加すれば可能なのですが・・。

949 名前:login:Penguin mailto:sage [2008/04/23(水) 23:29:21 ID:Y+58Od8z]
なんで tail -f なんてする必要が有るんだ?

950 名前:login:Penguin mailto:sage [2008/04/23(水) 23:33:35 ID:M4AkpEZt]
>>948
grep -E "(AAA|BBB)" もしくは
egrep "(AAA|BBB)"

951 名前:948 mailto:sage [2008/04/24(木) 04:44:09 ID:8uaGXJVC]
>>950
egrepでしたか、ありがとうございます。

>>949
1秒に100行以上流れるログなので、速すぎて読めないのよねw

952 名前:login:Penguin mailto:sage [2008/04/24(木) 09:43:23 ID:C5h8jkbM]
一秒に100行以上流れるとか全然関係ないと思うぞ。

953 名前:login:Penguin mailto:sage [2008/04/24(木) 10:09:04 ID:iBrwQJHF]
そんなにおかしいか?
おれもよくやるけどな。

954 名前:login:Penguin mailto:sage [2008/04/24(木) 19:19:48 ID:BuhR71Gk]
>>952
logの監視は他にどんな手段でやってるの?

955 名前:login:Penguin mailto:sage [2008/04/24(木) 19:42:01 ID:28W2p82+]
tail -fしても速く流れるのは変わらないだろ?
大きなファイルの増分だけ見たい時は有効だけど。

956 名前:login:Penguin mailto:sage [2008/04/24(木) 19:54:48 ID:iBrwQJHF]
たとえば
tail -f access_log | grep 10.99.78.22
とかやっといて、10.99.78.22 からアクセスしながらログを見たりする。
tail -f access_log だけだとログが多過ぎるし
grep 10.99.78.22 access_log ではリアルタイムに見れない。

つーか、なんでそんなに否定したがるんだ?

957 名前:login:Penguin mailto:sage [2008/04/24(木) 20:51:49 ID:PIJRHfrL]
そんなのは常識。

tail -fするのは、増分を見たいからだろ?
速く流れるのは関係ない。それはgrepの役目。
>>949に対する>>951の答えはおかしい。

それが読み取れない>>953も疑問。




958 名前:login:Penguin mailto:sage [2008/04/24(木) 23:00:30 ID:amh/02/G]
>>956
基本だよな。それって。

959 名前:login:Penguin mailto:sage [2008/04/25(金) 01:12:52 ID:05aUO6OC]
役に立たないのは949,952,957のレスだろ
つegrep -v '(949|952|957)'

960 名前:login:Penguin mailto:sage [2008/04/26(土) 03:30:44 ID:2buln9M4]
ファイルを検索して、
ファイル名によって分岐させたいと思っています。
以下のようにスクリプトを書いたのですが、
if [ $file = *.o ]
がうまく動作してくれません。
どこが間違っているのでしょうか?

# $1はディレクトリ
for file in `find $1`
do
if [ -x $file ]; then
echo "x: Name=$file"
else
if [ $file = *.o ]; then # .oで終わるファイル
echo ".o: Name=$file"
else
echo "not .o: Name=$file"
fi
fi
done

961 名前:login:Penguin mailto:sage [2008/04/26(土) 03:41:55 ID:l2xr5sbr]
[ $file = *.o ] の * がパス名展開されるから。
こういう時は case 文使うと楽。

case "$file" in
*.o) echo ".o: Name=$file" ;;
*) echo "not .o: Name=$file" ;;
esac



962 名前:960 mailto:sage [2008/04/26(土) 04:22:04 ID:2buln9M4]
>>961
ありがとうございます!
>* がパス名展開される
なるほどです。

今後のためにお聞きしたいのですが、
このままifで処理するには
どのようにしたらよいのでしょうか?

963 名前:login:Penguin mailto:sage [2008/04/26(土) 05:02:51 ID:+ITD/myA]
expr でパターンマッチさせた結果を判定するのが常套手段だと思う。
でも解り易さで俺も>>961おすすめ。
shでなくbashやzshに依存するやり方で良いなら他にもあるので、manするとエエでがす。

964 名前:960 mailto:sage [2008/04/26(土) 11:07:16 ID:2buln9M4]
>>963
expr、なるほど。

C++やってるときも、caseなんてifがあるから要らね、
とか言ってるのをshにも持ち込んでしまったわけですが、
shではcaseを格上げします。

ありがとうございました。

965 名前:login:Penguin mailto:sage [2008/04/26(土) 11:09:05 ID:zBt65CRz]
>>964
ざけんな。switchの方がコードの見通しがよくなる場面が多々ある。
適材適所だ。

966 名前:login:Penguin mailto:sage [2008/04/27(日) 00:22:17 ID:FoD+QJwV]
一文字のみ、小文字を大文字に置換の方法、教えてください

_linux
から
_Linux

(この場合、小文字lを大文字Lへ、一文字のみ)
trとかsedでぐぐってみましたが、すべての文字に適用される例のものばかりで。。。

967 名前:login:Penguin mailto:sage [2008/04/27(日) 00:31:12 ID:mG61TWcx]
echo _linux | sed -e 's/[a-z]/\U&/'



968 名前:login:Penguin mailto:sage [2008/04/27(日) 01:13:49 ID:FoD+QJwV]
>>967
ありがとうございます
期待通りの動作になりました、感謝






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef