| Top -> Unix -> シェルなど | kei@sodan |
echo '(123"' echo "\(123\""echoで$(ドル記号)を表示させるには、
$ echo '$'echoで'(シングルクォート)を表示させるには、""で囲む。
$ echo "'"これを組み合わせれば、一通り何でも書ける。
$a='abc'; print "a=$a\n";をperl -e で実行するには
perl -e '$a='"'"'abc'"'"'; print "a=$a\n";'となる。('を"'"としてエスケープ、$は'で囲んでエスケープ)
n=0 while [ $n -lt 10 ] do echo $i (お好きなコマンド) n=`expr $n + 1` done一行にこだわるなら
n=0; while [ $n -lt 10 ]; do echo $i; n=`expr $n + 1`; doneあるいは、コマンドseqとかjotとかがあれば
for i in `seq 1 10` do echo $i done
for i in `seq 1 10`; do wget http://ww.hoge.com/${i}.jpg; done
とかする。
for i in `seq 0 99` do ssh `printf hoge%03d $i` reboot done
eat(){
echo "Eating $1"
}
hosts="apple orange banana"
for h in $hosts
do
eat $h
done
#!/bin/sh for f in *.png ;do convert $f `basename $f .png`.jpg; doneサイズを1024x768に。 cd vr_pc for f in *.jpg ; do convert -size 1024x768 $f orig/$f ; done
for f in *.jpg ; do convert -resize 200x150 $f x/$f ; done
#!/bin/sh m=$1 n=5 while [ $n -lt 100 ] do convert -quality $n $m.pgm $m$n.jpeg convert $m$n.jpeg $m$n.pgm ./a.out $m.pgm $m$n.pgm ls -s $m$n.jpeg n=`expr $n + 5` done
i=0 for f in $1/orig/*; do convert -resize 800x600 $f $1/`printf %02d $i`.png i=`expr $i + 1` done
if [ -e /etc ] ; then echo "/etc exists" ;fi
$ expr /home/kei/ : / 1/から始まる文字列だと1を返し、そうでないと0を返す。
find . -name "CVS" | xargs rm -rfCVSという名前のフォルダが全て消去されます。
#!/bin/sh cd .. tar czvf public_html.tgz public_html/* mv public_html.tgz public_html print "Content-type:text/html;\n\nall done";これで普通のcgiみたいにアップしてパーミッション変えて、外から実行したらちゃんと 圧縮ファイルが出来てました。でもよい子は真似しちゃだめ!?
i=`ls |wc -l` echo $iwc -lっていうのは行数数えるコマンドです。
$ !g gcc test.c -o test.outでOK。だけど、前に実行したコマンドに自信が無いときや、ちょっとだけ変更して実行したいときは、下のようにすると良い。
$ #!g # gcc test.c -o test.outこうすると、#が付いてるからコマンドは実行されないけど、直前に実行したコマンドとして# gcc test.c -o test.outが入ってるから、これを上矢印で呼び出して、書き換えたらけっこう楽。
$ #!g # gcc test.c -o test.out $ gcc test.c -o test2.out -O3特にコンパイルのオプション変える時とか重宝します。
$command > `date +"result.%H%M%S"`
$ find . -name "*.html" -exec ls -l {} \;
{} に引数が入る。\;はコマンドの終わりを示すのに必要。$ find . -name "*.html" |xargs qkc -exargsは引数をつなげるコマンド。qkcはnkfの高機能版みたいな。
#!/usr/bin/perl
$str = "rpm -e ";
foreach(<>){
chomp();
$str .=$_ ." ";
}
`$str`;
$ hoge=/home/kei/hoge.txt
$ echo $hoge
/home/kei/hoge.txt
$ echo ${hoge/*\//}
cd hoge pwd rm -f Thumbs.db foreach f (*.JPG) mv $f `basename $f .JPG`.jpeg end foreach f (*.jpg) mv $f `basename $f .jpg`.jpeg end cd ..なんだけど、上のループで一つもマッチしないとそこでスクリプトが停止してしまう。 多分エラーを無視みたいなオプションがあるんたろうけど…
set i=0 while ( $i <= 10 ) echo $i @ i++ endとしましょう。スペースの場所に気をつけて。「ディレクトリースタックの番号指定が深過ぎます.」といわれる時は、不等号の後のスペースを確認して下さい。(<= 10ってとこ)
$ cd ~/hoge $ pushd ~/fuga $ echo =0 /home/kei/fuga $ echo =1 /home/kei/hoge $ cp =0/fugafile =1/hogefileうーん、でもあまり使い出がない技だな…
$flag = 1;
sub my_adduser($){
my $uid = $_[0];
$useradd_str = "useradd $uid -g 10000 -p hogehogehoge -s /bin/bash";
$mkdir_str = "mkdir /home/$uid/";
if ($flag){
print $useradd_str . "\n";
#print $mkdir_str . "\n\n";
}
system($useradd_str);
#system($mkdir_str);
}
sub populate(){
foreach $uid ("x01".."x50"){
my_adduser($uid);
}
}
populate();
populateのhogehogehogeところには、crypt("パスワード", "適当な文字列")とした結果を入れる。
例えば一行スクリプトで
$ perl -e 'print crypt("hello", "ho") . "\n"'
として、出力された結果をhogehogehogeの代わりにいれる。
$ grep "pthread_create" `find -name "*.c"`
nm -o --defined-only *.a | grep シンボル名とすると、リンクしたいファイル名が分かる。 あと、lddでコンパイル済みのバイナリから、リンクされているライブラリが分かる。
<?xml version="1.0" encoding="EUC-JP"?>
<project name="graph" default="compile" basedir="." >
<property name="class_dir" value="./classes" />
<target name="compile">
<mkdir dir="${class_dir}" />
<javac srcdir="./" destdir="${class_dir}" encoding="EUC-JP" debug="no" />
</target>
<target name="clean">
<delete dir="${class_dir}" />
</target>
</project>
| Top -> Unix -> シェルなど | '2008/09/27 / 高橋 慧(たかはしけい) / [コメントはこちらまで] |