Bir veya daha fazla dosyayı argüman olarak alan ve büyük harfleri küçük harflere dönüştüren bir komut dosyası yazmaya çalışıyorum. Orijinal dosyanın içeriği sadece küçük harflerle değiştirilir.
Argümanlarda verilen bir dosya bulunmalı, normal bir dosya olmalı, okuma / yazma işlemine izin verilmeli ve yürütmede izin verilemez ve boş bırakılamaz.
# We assume the current file is valid.
declare valide="true"
if (("$#" < 1)) ; then
# Error, you must enter at least one parameter.
echo -e "Erreur. Vous devez entrer au moins un parametre."
fi
for param in "$@" ; do
if [ ! -e $param ] ; then
$valide="false"
elif [ ! -f $param ] ; then
$valide="false"
elif [ ! -r $param ] ; then
$valide="false"
elif [ ! -w $param ] ; then
$valide="false"
elif [ -x $param ] ; then
$valide="false"
elif [ -s $param ] ; then
$valide="false"
fi
if [ $valide=="true" ] ; then
# Create temporary file.
ficTemp=$(/usr/bin/mktemp)
$(tr '[:upper:]' '[:lower:]' < $param > $ficTemp)
$($ficTemp > $param)
else
# Error, the file $param is invalid for this script.
echo -e "Erreur. Le fichier $param est invalide pour ce script."
fi
done
Benim sorunum komut dosyasını normal bir kabukta çalıştırdığımda (root değil) şu hatayı alıyorum:
line 45: /tmp/tmp.xxx: Permission denied
İşte bir ls -ld / tmp sonucudur:
drwxrwxrwt. 12 root root 380 May 14 18:35 /tmp
sestatus
.
touch /tmp/file
ve dosya problem yaratmadı. sestatus, SE Linux'un etkin olduğunu döndürür. Daha fazla bilgiye mi ihtiyacınız var? @JuliePelletier
"$param"
, "$ficTemp"
ve, gerçekten güvenli olması için "$valide"
) iyi bir nedeniniz olmadıkça, ve sen değil Ne yaptığını bildiğinden eminim. Açıkçası, sen yok gerek gibi basit sabit dizeleri alıntı yapmak "true"
ve "false"
tabii ki, bu zarar vermez, ancak. Ve do tutmak [:upper:]
ve [:lower:]
tırnak içinde - [
özel bir karakter olduğunu ve aktardığı gerekmektedir. … (Devam ediyor)
-e
ve -f
farklı hata mesajları vermek istemiyorsanız - -f
test başarılı olursa , dosyanın var olduğunu ve -e
testin gereksiz olduğunu biliyorsunuzdur . (3) Sebepiniz echo -e
olmadıkça kullanmayın - dosya adı ters eğik çizgi içeriyorsa sorun çıkarır. (4) özel bir durum olarak, kısaltabilirsiniz for param in "$@"; do
için for param do
. (5) AFD'nin yanıt ek olarak: İhtiyacınız olmayan (ve olmamalıdır ) $(
ve )
çevresindeki tr '[:upper:]' '[:lower:]' < "$param" > "$ficTemp"
komuta.