Ваше первое предложение должно работать правильно. Я полагаю, единственный вариант - проверить, правильно ли вы вводите переменные (через пробел, а не через запятую). Вы можете продемонстрировать правильность кода, слегка изменив его, чтобы напечатать значения двух переменных и напечатать команду matlab
вместо ее выполнения:
#!/bin/bash
echo "Please variables 1 and 2:"
read var1 var2
echo "var1=$var1, var2=$var2."
echo matlab -nodesktop -nosplash -r "functionmat($var1,$var2)"
Con GNU find y awk:
find. -maxdepth 1 -type f -printf "%s\n" | awk '{sum+=$1} END{print sum+0}'
La salida es el tamaño del archivo en bytes. La declaración final es print sum+0
en lugar de solo print sum
para manejar el caso donde no hay archivos (es decir, para imprimir correctamente 0
en ese caso ). Esta es una alternativa a hacer BEGIN {sum=0}
.
Usandowc
:
wc -c * 2> /dev/null
Si todo lo que se necesita es el total, haz:
wc -c * 2> /dev/null | tail -1
Si está buscando una forma de script basada en bash -, shell -para hacerlo, aquí hay un ciclo de shell que reúne todos los archivos (punto -archivos incluidos ), luego utiliza la utilidad GNU coreutils stat
para imprimir su tamaño en una variable de suma.
shopt -s dotglob
sum=0
for f in *
do
[[ -f "$f" && ! -h "$f" ]] || continue
sum=$(( sum + $(stat -c "%s" "$f") ))
done
echo $sum
Bash considera que los enlaces simbólicos son "archivos normales", por lo que debemos omitirlos con la prueba -h
.
Так как это было очень простое упражнение, учитель потребовал, чтобы упражнения использовали базовые команды, которые требуют немного большего развития и могут быть позже заменены более мощными командами, такими как найти или стат. Но я получил ответ, и это было:
dir=$1
if [ ! -d $dir ]
then
exit 1
else
sum=0
cd $dir
(ls -l $dir) > fitxers.txt
C=($(awk '{print $5}' fitxers.txt))
len=${#C[*]}
i=0
while [ $i -lt $len ]
do
for element in $(ls $dir)
do
if [ -f $element ]
then
let "sum = $sum + ${C[$i]}"
fi
(( i++ ))
done
done
echo $sum
rm -r fitxers.txt
exit 0
fi
Надеюсь, это будет немного полезно для других новичков.
Мы также можем использовать приведенную ниже команду
find. -maxdepth 1 -type f -exec ls -ltr {} \;| awk 'BEGIN{sum=0} {sum=sum + $5} END {print sum}'