Verilen dizindeki ve alt dizinlerdeki tüm dosyaları sayan bir bash betiği yazmaya çalışıyorum, bu yüzden şunu yazdım:
#!/bin/bash
var=0
if ["$#" == "0"]
directory="$(echo pwd)"
then
directory=$1
fi
echo $directory;
for x in `ls -l $directory | grep "^-" | tr -s ' ' | cut -d ' ' -f 9`;
do
var=$((var+1))
done
for x in `ls -l $directory | grep "^d" | tr -s ' ' | cut -d ' ' -f 9`;
do
output = "$($0 $x)"
done
var=$((var+output))
echo $var
Ama böyle bir şey alıyorum:
./lala2
./lala2: line 4: [0: command not found
test
./lala2: line 4: [1: command not found
./lala2: line 4: [1: command not found
Neden? Değişkenler küresel midir?
[
) komutunda boşluklar gerekliyken , ödevlerde yasaktır. Bu yüzdenoutput = "$($0 $x)"
değiştirilmelidiroutput="$($0 $x)"
. (Ayrıca, boşlukların komutların yanı sıra anahtar kelimeler için de önemli olduğunu söyleyebilirim:[["$#"
daha iyi çalışmayacak["$#"
).