シェルスクリプト総合 ..
[2ch|▼Menu]
950:login:Penguin
09/03/19 19:05:34 KDP/tv8i
>>949
元質問はオレなんだが、>>948のとおり、別にduでもdfでもなく、GとかMとかのサイズ指定で
かつ小数点付きのを、どうソートするか、というのが意図だったわけで。

質問の仕方がまずいのは認める。すまん。

951:login:Penguin
09/03/20 10:34:47 OD1Bm4W7
シェルスクリプトで開発したツールをshcでコンパイルしたとして、
それがシェルスクリプトだとバレることってありますか?
もちろん調べればわかるでしょうけど
一般的なエンドユーザの能力ではどうでしょうか?

952:login:Penguin
09/03/20 11:49:16 vtofDqpI
>>951
つ chmod 311 a.out

953:login:Penguin
09/03/20 21:45:28 Pky/qqR2
tar

954:login:Penguin
09/03/20 21:46:03 Pky/qqR2
tar tvf filename.tar
の結果をファイル名順にソートするにはどうすればいいでしょうか?

955:login:Penguin
09/03/20 21:54:15 vtofDqpI
sort -k 6

956:login:Penguin
09/03/20 22:29:18 Pky/qqR2
>>955
ありがとうございます。以下で出来たと思います。
tar tvf filename.tar | sort -k 6
ファイル名が9番目に来ることがあるのは、OSによるものでしょうか?

957:login:Penguin
09/03/20 22:30:46 vtofDqpI
ロケール依存じゃね?
日付の表示

958:login:Penguin
09/03/20 22:45:25 Pky/qqR2
>>957
なるほど、ありがとうございます。

当初の質問とズレますが

ls -lRのディレクトリ名が
職場の環境では
temp:
となり

自宅では
./temp:
となるのもロケール依存の問題でしょうか?

959:login:Penguin
09/03/20 23:54:41 vtofDqpI
ls -lR temp
ls -lR
の違いって事はない?

960:login:Penguin
09/03/21 10:08:06 /JVnxKfV
>>959
引数にディレクトリを指定せずに>>958の違いがでます。
OSは職場がAIXで、自宅がCentOSです。

結果のリストをテキストファイルに出力してプログラムで利用しているので、
フォーマットが違うと問題があるのですが、
行末に「:」があればディレクトリと認識したり、リストのフォーマットに応じたプログラムを
書けばいいのかなと思います。

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

961:login:Penguin
09/03/21 13:39:10 ZdP11rWE
AIXならコードベースが違うから、細かい書式も違うだろうね。

find . -printあるいはfind . -lsの結果を利用した方がいいかもね。
こっちは加工されることを前提とした出力だから。
ls -lRはそうじゃない。


962:login:Penguin
09/03/24 21:43:58 vhkRQKv/

bash で、複数の戻り値を返すにはどうやる?

func foo()
{
return VAL1 VAL2
}

(VAL1, VAL2)=$(foo)

こんなのがやりたいんだけど。

今まで思いついた例では、
1、ファイル経由で帰す。
echo $VAL1 >/tmp/$PID.val1
echo $VAL2 >/tmp/$PID.val2
可能だけどちょっと無駄。

2、readをつかう。
#!/bin/bash
$(foo) | read VAL1 VAL2
やってみたけど、動かない。なんとかしてくれ!。



963:login:Penguin
09/03/24 22:07:39 fdZEc0lM
returnで返すことにこだわる意味があるん?
VAL1 VAL2 に関数内で値つっこめばいいだけじゃないの?
グローバル変数がどうのとか、シェルで気にする必要ないだろと個人的に思うし。

964:login:Penguin
09/03/24 22:13:47 JcSO3hFa
>>962
URLリンク(www.linux.or.jp)
>関数ローカルの変数は、組み込みコマンド local で宣言できます。
>普通は、変数とその値は関数とその呼び出し側で共有されます。

965:962
09/03/24 23:09:01 vhkRQKv/

グローバル変数で受け渡し?

んまあそうなんですけど、
なんでもグローバルという、BASIC言語みたいなのは生理的にイヤ。
可能な限り普段から全部 local 宣言つけてますので。

なんとか、return VAL_A VAL_B
とかムリっすか?



966:login:Penguin
09/03/24 23:27:22 JcSO3hFa
>>965
無理
> return [n]
> 指定した返り値 n で関数を終了させます。
> n を省略すると、返却ステータスは関数内で最後に実行したコマンドの返却ステータスになります。

スクリプトを分けて標準入出力で受け渡すくらいしか思いつかん

967:login:Penguin
09/03/24 23:31:50 elKnmt6d
俺も昔戻り値二つ返したかったが諦めたことがある。
泣く泣くグローバルにした。

968:login:Penguin
09/03/24 23:32:20 LPmFGK87
>>965
無理矢理だけどこんなことは出来る。

foo ()
{
echo "$VAL1 $VAL2"
}

VALS=(`foo`)

VAL1=${VALS[0]}
VAL2=${VALS[1]}



969:login:Penguin
09/03/25 12:00:35 ZZ2mmRGj
グローバル変数がイヤならばそもそも sh じゃなくて別のスクリプト言語で書け。
そういう言語なんだからあきらめて受け入れろ。
無理に技巧をこらしたところで逆に可読性を落とすだけ。

970:login:Penguin
09/03/25 12:15:44 NaCjRRoe
>>969
そうおもう。perlでもrubyでもgaucheでもいいから。
でも、延長線上で使えるrubyのほうが馴染みやすいかも

971:login:Penguin
09/03/25 12:23:07 uD+uLQB8
>>962
> return VAL1 VAL2
< echo VAL1 VAL2
してreadしる


972:login:Penguin
09/03/25 17:28:54 GtIifwrA
/tmpに書け

973:login:Penguin
09/03/26 15:32:50 3e22XvSN
シェルスクリプトを始めて勉強するのですが、

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(URLリンク(www.amazon.co.jp))



UNIXシェルスクリプトコマンドブック(URLリンク(www.amazon.co.jp))

どちらで勉強するのが良いでしょうか?

974:973
09/03/26 15:33:45 3e22XvSN
×始めて 
○初めて

orz

975:login:Penguin
09/03/26 16:30:55 5RpvIQgk
入門bashがオヌヌメ

976:login:Penguin
09/03/27 00:19:45 hx4pY+SP
どれでもいっしょでヌメヌメ

977:login:Penguin
09/03/27 01:38:27 SSuQKmC1
>>976
>>975

ありがとうございます。
まずは>>975さんにヌメヌメして頂いた入門Bashから勉強していきたいと思います。

978:login:Penguin
09/03/27 02:32:52 3RSixa0K
つ「全部」

979:login:Penguin
09/03/29 04:23:46 k6vYgSJE
とあるディレクトリ以下に存在する
特定の拡張子のファイルのみについてファイルサイズの合計を知りたい場合、
最もマシンに負荷を与えずに結果を出すにはどの方法が適しているでしょうか?

・ duコマンドだと除外パターンのパラメータしかない
・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

という感じで、もっとサクっと結果を軽い処理で出せるような気がするんですが・・・。

980:login:Penguin
09/03/29 05:38:56 RIZc4nP9
findとawkで

981:login:Penguin
09/03/29 07:07:03 HsEQt0tU
>・ lsの結果の拡張子でgrepした後、ファイルサイズ部分をawkしてexprで足し算だと負荷が結構かかる

expr要るのか?
ls -Rl | grep "\.suffix" | awk '{size += $5} END {print "total " size}'
find -name \.suffix -printf "%s\n" | awk '{size += $1} END {print "total " size}'

982:login:Penguin
09/03/29 15:49:16 HhnBqalt
>-name \.suffix
o... rz

983:login:Penguin
09/03/30 08:01:30 4/oTu4d/
10台くらいサーバセットアップする必要があり、
それぞれのapacheの設定ファイルのIP部分だけ変えたいのですが、
何かシンプルで良い方法ってあるでしょうか?

環境変数設定kono_server_no_ipを設定して、
sedあたりで設定ファイルのIP部分をkono_server_no_ipに置換処理、
みたいな感じをぱっと思いついたのですが、
もっとベターな方法ってあるでしょうか?

984:login:Penguin
09/03/30 10:33:16 rBZKWvDE
>>983
まずサーバ毎の環境変数(kono_server_no_ip)の設定はどうやるの?
環境変数の設定をエディタでやったら本末転倒だよね?

「このIP」が自分自身のipアドレスでいいなら、ifconfigで取得してsedで置換。

あと、シンプルじゃなくていいならPuppetとか。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5394日前に更新/243 KB
担当:undef