#shell #scripting
Вопрос:
# !/bin/sh
echo "Enter file name:"
read fname
set ${ls -la $fname}
echo "The size of test.sh is $5 byte"
exit 0
Я хочу создать код, который может печатать размер файла с помощью команды «установить» в скрипте оболочки Linux, поэтому я использую ls-la, но он не работает, и мой терминал просто говорит «плохая замена» в строке 4 . Любая помощь, пожалуйста 🙂
Комментарии:
1. Я думаю , ты хотел использовать
$()
, а не${}
. Не уверен , что вы хотите сделать с выводомls
иset
, хотя. Возможно , вы имели в видуset -- $(ls -la "$fname")
, но это кажется хрупким .
Ответ №1:
Я бы предложил попробовать следующее:
# !/bin/sh
echo "Enter file name:"
read fname
SIZE=$(ls -l "${fname}" |awk '{print $5}')
echo "The size of ${fname} is ${SIZE} bytes"
exit 0
SIZE
переменная будет содержать размер прочитанного имени файла. Пожалуйста, обратите внимание, что ls -al
так же, как ls -l
и раньше, но он также показывает скрытые файлы (те, которые начинаются с».»).
Использование set
для определения переменных на самом деле не является лучшей практикой. Вот предложение об использовании набора.
Комментарии:
1. Я думал, что это не нужно, если у вас есть скобки, но я рад уточнить их на основе хороших отзывов. Спасибо!
2. Скобки не препятствуют расширению (они хороши по другим причинам, но в данном случае не имеют значения). Попробуйте
a='*' ; echo ${a}
vsa='*' ; echo "${a}"
.
Ответ №2:
Следуя и исправляя кастеля, я бы скорее сказал:
# !/bin/sh
read -p "Enter file name: " fname
SIZE=$(ls -l "$fname" | awk '{print $5}')
echo "The size of $fname is $SIZE bytes"
Комментарии:
1. @Биффен: ой, извини. Также добавлены кавычки вокруг второго появления
fname
.