shell

ターミナルで実行したときとスクリプトファイルを実行したときで結果が違う

次のようなitems.xmlを作って、 <items> <item>foo</item> <item>bar baz</item> <item>qux</item> </items> bashで $echo "cat /items/item[2]" | xmllint --shell items.xmlしたときは / > ------- <item>bar baz</item> / >ってなるけど、 #!/bin/sh echo "cat /items/item[2]" | xmllint --shell items…

条件分岐

if文 elseが無いif文はこんな感じ if 条件式 then 処理 fi then節とelse節がある場合 if 条件式 then 処理1 else 処理2 fi else ifみたいなのが付く場合 if 条件式1 then 処理1 elif 条件式2 then 処理2 elif 条件式3 then 処理3 else 処理4 fi case文 switc…

条件評価

例えばファイル「sample.dat」が存在するかどうか調べるとき test -f sample.dat または [ -f sample.dat ] とできる。-fが演算子でsample.datが被演算子みたいな感じかな?ファイルの存在以外にも、以下のようにいろいろな判断ができるそうだ。「真」という…

引数に関する変数

$argv 引数を格納した配列 $1, $2, $3,... 1番目、2番目、3番目...の引数 $# 引数の個数 $@ すべての引数(区切り文字はスペース) $* すべての引数(区切り文字はIFSの値) $? 直前に実行したコマンドの終了ステータス

引数argv

あるぇ?僕の環境(zs 4.3.10 i686-pc-linux-gnu)で、次のスクリプトが意図したとおりに動かない。 echo "arg1: $argv[1]" echo "arg2: $argv[2]" echo "arg3: $argv[3]" 実行結果は以下。 ./argv.sh foo bar baz arg1: [1] arg2: [2] arg3: [3]

lsコマンド

ls | wc -l ってやるとファイルの数を数えられることが理解できずにいた。 だって、 wc -l 改行文字を数えるコマンドでしょ?今居るディレクトリはファイル数は少ないし ls の結果は一行だよ? とか思いつつ、 ls > list.txt cat list.txt ってやってみたら…