• ベストアンサー

linuxのfor文についてです。

linuxのfor文(C言語風)を利用して/var/log/httpd/にあるaccess.logのファイルのうち130301~130309のものをls -lで情報を表示したいです。 ここでbashのfor文を使って最後の1文字だけを変化させながらls -lを9回実行するシェルスクリプトを作りたいのですがどのように書いたら良いのかわかりません。 どなたか教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

最後の1文字だけ変数で置き換えれば可能です 例 #!/bin/bash #ディレクトリの指定 dir=/var/log/httpd for ((num=1; num<10; num++)){ ls -l $dir/13030$num } という感じで

shiro857
質問者

お礼

素早い回答ありがとうございます。 おかげで実装することができました。 ありがとうございました。

関連する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が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。

  • ログがローテイトされなくなった.

    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】シェルスクリプトについて

    Linuxの学習をしています。 シェルスクリプトを使って、1~50までの整数の和を求めるという問題があるのですが解けません…。 とても簡単な問題だとは思いますが、どなたか教えて頂けますでしょうか? 因みに、for文またはwhile文を使うようにという指示があり、標準シェルを用いてます。 宜しくお願い致します。

  • 環境を区別して、動作を分岐させる方法 シェルスクリプト

    bashのシェルスクリプトで、Windows(cygwin)とLinuxの環境を区別して、動作を分岐させる方法が知りたいです。 #!/bin/bash #Windows(cygwin)の場合 ls win/ #linuxの場合 ls linux/ #freebsdの場合 ls freebsd/ #MacOSXの場合 ls mac/

  • 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 ---------------------------------------

  • 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(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とどちらが向いているでしょうか? あるいはパールなんかを使った方が良いのでしょうか? 当面のやりたい事をクリアする方法、および、ツールの選定についてご教授下さい。 以上、よろしくお願いします。