linuxの最近のブログ記事

カテゴリー:

http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html

以下引用

■変数に対するパターンマッチ

 前回、ファイルの拡張子を書き換える例を示したと思います。そこに使ったパターンマッチは4種類あり、非常に汎用性の高いものです。

* ${変数#パターン}
変数の内容について、最初の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。

* ${変数##パターン}
変数の内容について、最初の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。

* ${変数%パターン}
変数の内容について、最後の部分とパターンがマッチしたら、最も短く一致する部分を取り除いた残りの部分を返す。

* ${変数%%パターン}
変数の内容について、最後の部分とパターンがマッチしたら、最も長く一致する部分を取り除いた残りの部分を返す。

 変数testpathに/home/sekino/Linux/how.to.linuxという値を設定しておくと、
$ echo ${testpath##/*/}
how.to.linux
$ echo ${testpath#/*/}
sekino/Linux/how.to.linux
$ echo ${testpath%%.*}
/home/sekino/Linux/how
$ echo ${testpath%.*}
/home/sekino/Linux/how.to

といった結果になります。また、ファイル拡張子を置き換えるという観点からは、
#!/bin/sh
file=scan01.jpg
echo ${file}
echo ${file%jpg}
echo ${file%jpg}png

というスクリプトを実行すると分かりやすいと思います。

カテゴリー:

man test

名前
test - ファイル形式のチェックや値の比較を行う

書式
test [expr]

test [--help] [--version]

説明
test は条件式 expr を評価した結果によって、 0 (真) または 1 (偽) を終了
ステータスとして返す。

式の各部分はそれぞれ分離された引数でなければならない。式は単項式ある い
は 二項式である。 test はファイルのステータス調査、文字列操作、数値の比
較演算を行うことができる。

ほとんどのシェルには同名の組み込みコマンドがあるので、単に ‘test’ と し
て 実行すると、ここで記述されたものとは異なった機能のものが実行されるだ
ろう。

ファイル形式のテスト
-b file
file が存在し、ブロックスペシャルファイルであれば真。
-c file
file が存在し、キャラクタスペシャルファイルであれば真。
-d file
file が存在し、ディレクトリであれば真。
-f file
file が存在し、通常ファイル (regular file) であれば真。
-h file
-L file
file が存在し、シンボリックリンクであれば真。
-p file
file が存在し、名前付きパイプ (named pipe) であれば真。
-S file
file が存在し、ソケットであれば真。
-t [fd]
fd が端末でオープンされていれば真。 fd が省略された場合のデフ ォ
ルト値は 1 (標準出力)。

ファイルのパーミッションのテスト
-g file
file が存在し、set GID されていれば真。
-k file
file が存在し、 sticky ビットが立っていれば真。
-r file
file が存在し、読み取り可能であれば真。
-u file
file が存在し、 set SUID されていれば真。
-w file
file が存在し、書き込み可能であれば真。
-x file
file が存在し、実行可能であれば真。
-O file
file が存在し、現在の実効ユーザー id による所有であれば真。
-G file
file が存在し、現在の実効グループ id による所有であれば真。

ファイル特性のテスト
ファイル特性のテスト
-e file
file が存在すれば真。
-s file
file が存在し、サイズが 0 より大きければ真。
file1 -nt file2
file1 が file2 より (修正時刻で比較して) 新しければ真。
file1 -ot file2
file1 が file2 より古ければ真。
file1 -ef file2
file1 と file2 のデバイス番号と i-ノード番号が共に等しければ真。

文字列のテスト
string
-n string
string の長さが 0 より大きければ真。
-z string
string の長さが 0 であれば真。
string1 = string2
二つの文字列が等しければ真。
string1 != string2
二つの文字列が等しくなければ真。

数値のテスト
arg1 OP arg2
OP は -eq, -ne, -lt, -le, -gt, -ge のいずれか。これらの代数二 項
演 算子は、それぞれ arg1 が arg2 (に等しい、に等しくない、より小
さい、より小さいか等しい、より大きい、より大きいか等しい) 条件を
満たせば真。 arg1 および arg2 は正の整数、負の整数をとることがで
きる。また -l string という特殊な式を指定することもでき、この 場
合は string の長さとなる。

テストの論理結合
! expr expr が偽であれば真。
expr1 -a expr2
expr1 と expr2 の両方が真であれば真。
expr1 -o expr2
expr1 か expr2 のどちらかが真であれば真。

オプション
GNU test が引数一つだけで起動された場合には、以下のオプションが認識され
る:

--help 標準出力に使用方法のメッセージを出力して正常終了する。

--version
標準出力にバージョン情報を出力して正常終了する。

カテゴリー:

ディレクトリ名、ファイル名だけ書くと、ディレクトリツリー内のすべての一致する名前のディレクトリとファイルが、除外されてしまう。

たとえば、
cache
と書くと、
ディレクトリツリー内のすべてのcacheディレクトリが除外されてしまう。
ルート直下のcacheだけを除外したい場合は、
/cache
と書かなくてはいけない。

/stats
.svn
/web/uploads
/cache
/log
/web/.htaccess

上記のように書いた場合、すべての「.svn」が除外され、
他のディレクトリやファイルは、それだけが除外される。

カテゴリー:

http://yasuharu.net/memo/index.php?id=13
(以下引用 )
Linux - : bad interpreter: そのようなファイルやディレクトリはありません

このエラーは改行コードの違いにより起こるエラーです。
FTPのASCIIモードで更新するファイルを転送している場合などは
このような問題は起こりにくいのですが、
Windows上でファイル編集して、そのままSamba経由で
ファイルを保存している場合などこの問題にあたりやすいです。
このような方法でLinux上のファイルを読み書きしている場合
いつも気をつけておかないと無駄な時間をすごすことになりかねます。

さて、改行コードの直し方ですが、
一番手っ取り早いのはFTPのASCIIモードで転送することでしょうか。
これなら自動的に改行コードを変換してくれます。
ここではLinux上で改行コードの変換の仕方について扱いと思います。

nkf -Lu [入力ファイル] > [出力ファイル]

これで改行コードが変換されたファイルが生成されます。
入力ファイル = 出力ファイルでやると
ファイルの中身が消えるので注意してください。

カテゴリー: