- ベストアンサー
linuxのfor文についてです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
最後の1文字だけ変数で置き換えれば可能です 例 #!/bin/bash #ディレクトリの指定 dir=/var/log/httpd for ((num=1; num<10; num++)){ ls -l $dir/13030$num } という感じで
関連するQ&A
- Linux の shell プログラミングについて
すみません、どなたがご存じでしたら教えてください。 Linux の shell プログラミングですが、 実行するコマンドをそのまま表示する良い方法が無いでしょうか? 現在は実行するコマンドをechoで書いています。 たとえば次のような感じです。 #!/bin/bash var1=/etc echo 'ls -l $var1 | wc -l' ls -l $var1 | wc -l 結果 ls -l $var1 | wc -l 205 でも(echoで)同じ内容を2行書きたくないので いろいろ調べて次のようにしてみました。 #!/bin/bash var1=/etc set -x ls -l $var1 | wc -l set +x 結果は + ls -l /etc + wc -l 205 + set +x 思ったようになりませんでした。 他に良い方法が何かありますでしょうか? よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- linuxのシェルスクリプト
linuxのシェルスクリプト シェルスクリプトの質問をどこですればよいのかよくわからないので、ここでさせていただきます。 最近、始めてシェルスクリプトの勉強を始めました。 スクリプトに渡す引数を出力したいと思い、 echo $1 echo $2 echo $3 とかくと、スクリプトに渡した引数が出力されます。 これを、for文で書くと for i in 1 2 3 do echo $i done とねるのですが、これでは1,2,3が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Linux系OS
- ログがローテイトされなくなった.
fedora11です。 3月頃からapacheを実行しています。 分からないことだらけで、あちこち弄ってました。 4月までは、次のようにログがローテイトされてました。 /var/log /var/log/massages /var/log/massages-20110414 /var/log/massages-20110418 ・ ・ /var/log/httpd/ /var/log/httpd/access_log /var/log//httpd/access_log-20110414 /var/log//httpd/access_log-20110418 ・ ・ 2011.04.18の後、全てのログファイルが、-yyyymmddで分離されず、元のファイルにどんどん追加される一方になりました。 (今まで気にしなかったのもひどいですが。) /etc/logrotate.confの内容は、デフォルト設定のままです。 「ローテイトする/しない」という設定どこかにありましたっけ。 よろしくお願いします。
- 締切済み
- Linux系OS
- 【Linux】シェルスクリプトについて
Linuxの学習をしています。 シェルスクリプトを使って、1~50までの整数の和を求めるという問題があるのですが解けません…。 とても簡単な問題だとは思いますが、どなたか教えて頂けますでしょうか? 因みに、for文またはwhile文を使うようにという指示があり、標準シェルを用いてます。 宜しくお願い致します。
- ベストアンサー
- Linux系OS
- 環境を区別して、動作を分岐させる方法 シェルスクリプト
bashのシェルスクリプトで、Windows(cygwin)とLinuxの環境を区別して、動作を分岐させる方法が知りたいです。 #!/bin/bash #Windows(cygwin)の場合 ls win/ #linuxの場合 ls linux/ #freebsdの場合 ls freebsd/ #MacOSXの場合 ls mac/
- 締切済み
- Linux系OS
- expectでfor文のあるシェルファイルの記述について
expect を使用しているAシェル内で、Bシェルを実行しています。(成功しています。) が、作成されたファイルのユーザを揃えたいため、 Aシェル内にBシェルの内容を記述したいと思っています。 Aシェルファイルでのfor文の記述と、 変数を受け取る方法がわからないため、エラーになってしまっています。 expect文内のfor文の記述と変数の受け取り方などおしえてください。 よろしくお願いいたします。 ------------------Aシェルファイル--------------------- #!/bin/sh set timeout -1 spawn su - ユーザ名 set prompt ".*ユーザ名.*" sleep 1 expect "Password:" send "パスワード\n" expect -re $prompt sleep 1 send "/パス/rename.sh\n" expect -re $prompt send "echo /var/www/html/パス/tokyo/*/*.jpg | xargs /usr/bin/mogrify -resize 500x -quality 100\n" expect -re $prompt send "exit\n" --------------------------------------- ------------------Bシェルファイル--------------------- #!/bin/sh declare -i i=1 for dirlist in `ls -l /var/www/html/パス/tokyo/ | awk '$1 ~ /d/ {print $9 }' ` do rm -rf /var/www/html/パス/$dirlist/small mkdir /var/www/html/パス/$dirlist/small done ---------------------------------------
- 締切済み
- Linux系OS
- httpdのエラーログをwebでリアルタイムでみたい
php5、fedora4、apache2.0です。 httpdのエラーログ(/var/log/httpd/error_log)をリアルタイムに見たいのですが、何かPHPを使ってよい方法はないでしょうか? 今のところ、あるページにアクセスしたらSystem関数でシェルを実行し、ログをコピーしてきて表示するようにしていますが、上手くいきません。 $last_line = system('sh httpd_error.sh',$return_val); httpd_error.sh ---------------------------------- #!/bin/sh cp -v /var/log/httpd/error_log /var/www/html/log/ ----------------------------------- 「/var/log/httpd/error_log」へのアクセス権がないというエラーが出てしまいます。 PHPのsystem関数でシェルを実行した時って、誰が実行していることになるのでしょうか? また、これ以外にhttpdのエラーをリアルタイムにwebから見れる方法がありましたらご教授ください。 ヨロシクお願いします。
- ベストアンサー
- PHP
- LinuxとMacのコマンドのオプションの違い
LinuxとMacのターミナルコマンドのオプションの違いについて質問があります。 例えば、lsコマンドを用いる場合、Linuxでは 「ls -l /」と「ls / -l 」は同じ動作をしますが、Macでは、後者(オプションを後ろにつける)と動作しません。 同様にrmコマンドの-rなども後ろにつけると動作しません。 この違いは何の違いから生じるものなのでしょうか? ターミナル?コマンド?shell?OS? また、macで動作させる方法はあるのでしょうか? よろしくお願いいたします。 LinuxはUbuntu16.04、MacはMojaveです。 シェルは共にbashです。
- ベストアンサー
- Linux系OS
- シェルスクリプト間で排他をとりたい
環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)
- ベストアンサー
- その他(プログラミング・開発)
- linuxのシェルでファイル名に先月以前の日付があるのを削除したい
linuxのシェルでファイル名に先月以前の日付があるのを削除したい bashでcshellでも良いのですが、 /pgsql/data/pg_log/ の下にたまったlog postgresql-2010-04-01-*.log postgresql-2010-03-31-*.log postgresql-2010-03-30-*.log などのうち、 先月以前の日付があるのを削除するスクリプトを作りたいのですが、上手くいきません。 ls postgresql*.logから全件数回して、if文で比較しようとしましたが、判定がうまくいきません。 何がネックになっているかと言いますと、 文字列「postgresql-2010-04-01-*.log」 文字列「postgresql-2010-04」をif文で比較すると、=の判定はできますが、 >や<で判定すると、全てthenになってしまいます。 文字の大小比較はできないようですね? また、 「postgresql-2010-04-01-*.log」 から、12文字目から7文字抜き出したいのですが、 substrのような事も出来るのかどうなのか分かりません。 bashでこういう事をするのはあまり向いていないのでしょうか? cshellとどちらが向いているでしょうか? あるいはパールなんかを使った方が良いのでしょうか? 当面のやりたい事をクリアする方法、および、ツールの選定についてご教授下さい。 以上、よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
素早い回答ありがとうございます。 おかげで実装することができました。 ありがとうございました。