Makefile のディレクトリ移動は () でくくろう

()内の処理が終わると自動的に元のディレクトリに戻ります。
()内の記述は1行で書く必要がありますので、;\ 等を使います。
途中に ifeq を入れる事はできません。
2016-06-30 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

Makefile で 複数のファイルを削除する場合はこう書こう

あらかじめリストを定義し、ループで削除処理を回します。


RM_LIST = \
hoge \
log.*

clean :
@for target in $(RM_LIST) ; do \
if [ -e $$target ] ; then \
rm -rf $$target ; \
fi ; \
if [ -d $$target ] ; then \
rm -rf $$target ; \
fi ; \
done

2016-06-23 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

コピーして.svnを消す

使い捨てスクリプト。


#!/bin/sh

copydir="copy"

if [ -r $copydir ]; then
rm -fr $copydir
fi

mkdir $copydir

cp -R HOGE $copydir/

find $copydir/ | grep \.svn$ | xargs rm -fr

テーマ : Linux
ジャンル : コンピュータ

2013-03-19 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

LinuxでCDやDVDのISOイメージを作成

ノートPCでCDやDVDのROMをイメージ化するのは結構時間がかかるし、結局ストレージサーバーに持っていくんだったら初めからLinux上で作ればいいんじゃない、というのが最初のコンセプト。

まぁ、ノートPCの調子が少し悪かったっていうのもあるんですが、やっぱりハードとしてはデスクトップの方が安定してますね。


#!/bin/sh

tmp=`su -c "volname"`
volname=`echo $tmp | perl -pe s/\s+//g`

echo "start making ${volname}.iso";

su -c "dd if=/dev/cdrom of=${volname}.iso"
su -c "eject"


あとはWindowsの方でdaemon tools liteなりでマウントすればOKです。

テーマ : Linux
ジャンル : コンピュータ

2011-01-30 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

cshのファイル関連演算子

ファイル関連の演算子、basename使う必要も無いです。


#!/bin/csh

set filename = $1

echo $filename:h # パス名
echo $filename:t # ファイル名
echo $filename:r # 拡張子削り
echo $filename:e # 拡張子だけ


テーマ : プログラミング
ジャンル : コンピュータ

2009-06-20 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

Makefileのメタ文字

CVSフォルダとか消す場合、正規表現でメタ文字を使いますが、SHと同じような感覚で書いてもうまく動きません。そういう時は2回続けてみましょう。


all::
find . | grep 'CVS$$' | xargs rm -fr

テーマ : プログラミング
ジャンル : コンピュータ

2009-06-13 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

SHでライン単位の文字列走査

IFS(Internal Field Separator)を使用します。

シェルの区切り文字は通常はスペース、タブ、改行文字で区切られてしまうので、catの結果を単純にforで回すとライン単位で走査できません。

そこで、IFSに改行のみ設定します。

以下の例ですと、beforeは通常の区切り文字でファイルの内容が出力されますが、afterの方では改行区切りで出力されます。


#!/bin/sh

infile=$1

echo "--- before ---"
for line in `cat $infile`; do
echo $line
done

echo "--- after ---"
IFS_BAK=$IFS;
IFS="\n";
for line in `cat $infile`; do
echo $line
done
IFS=$IFS_BAK;


テーマ : プログラミング
ジャンル : コンピュータ

2009-06-09 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

cshで複数ファイルの文字列置換

置換処理だけでなく、置換対象となるファイルのバックアップ、アンドゥ、バックアップファイルの削除もオプションによって選択して実行可能です。


#!/bin/csh

@ fh = 0
@ fb = 0
@ fr = 0
@ fu = 0
@ fd = 0

if ($#argv != 0) then
switch ($1)
case -h:
@ fh = 1; breaksw
case -b:
@ fb = 1; breaksw
case -r:
@ fr = 1; breaksw
case -u:
@ fu = 1; breaksw
case -d:
@ fd = 1; breaksw
endsw
shift
endif

if ($fh == 1) then
cat << ENDLINE
Usage: ${0} [Option]
Option:
-h :help
-b arg :backup argument files
-r arg :replace argument files
-u arg :undo argument files
-d arg :delete backup argument files
ENDLINE
endif

if ($fb == 1) then
foreach infile ($*)
set bakfile = "${infile}.backup"
if (! -r $bakfile) then
cp -f $infile $bakfile
endif
end
endif

if ($fr == 1) then
foreach infile ($*)
set outfile = "${infile}.tmp"
touch $outfile
foreach line (`cat $infile`)
# 置換処理はここで行う
set line = `echo $line | perl -pe s/hoge/fuga/g`
echo $line >> $outfile
end
mv -f $outfile $infile
end
endif

if ($fu == 1) then
foreach infile ($*)
set bakfile = "${infile}.backup"
if (-r $bakfile) then
cp -f $bakfile $infile
endif
end
endif

if ($fd == 1) then
foreach infile ($*)
set bakfile = "${infile}.backup"
if (-r $bakfile) then
rm -f $bakfile
endif
end
endif

テーマ : プログラミング
ジャンル : コンピュータ

2009-05-23 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop

cshでgetoptsもどき

個人的にはcshでシェルスクリプトを書く必要はまったく無いと思いますが、シェルがtcshの環境等ではcshで書かれたスクリプトをメンテナンスする必要がある事もあります。そのため、cshにもある程度慣れておいた方がいいです。

cshではshで使えたgetoptsは使えず、また関数も無いため、変数等を使って無理やり実装します。


#!/bin/csh

@ fh = 0
@ fp = 0

# 引数処理
while ($#argv != 0)
switch ($1)
case -h:
@ fh = 1
breaksw
case -p:
@ fp = 1
shift
set str = $1
breaksw
endsw
shift
end

# ヘルプ
if ($fh == 1) then
cat << ENDLINE
Usage: ${0} [Option]
Option:
-h help
-p arg print argument
ENDLINE
endif

# プリント
if ($fp == 1) then
echo $str
endif

テーマ : プログラミング
ジャンル : コンピュータ

2009-05-19 : Work-Linux-Makefile/Sh/Csh : コメント : 0 : トラックバック : 0
Pagetop
ホーム  次のページ »

プロフィール

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター