Вы не можете. Выбор используется оператором case, чтобы решить, что делать. Это не устанавливается оператором case.
Вместо этого вы можете попробовать что-то вроде этого:
selection=
until [ "$selection" = "0" ]; do
cmd=''
echo ""
echo "PROGRAM MENU"
echo "1 - display free disk space"
echo "2 - display free memory"
echo ""
echo "0 - exit program"
echo ""
echo -n "Enter selection: "
read selection
echo ""
case "$selection" in
1) cmd='df' ;;
2) cmd='free' ;;
0) cmd='exit' ;;
*) echo "Please enter 1, 2, or 0"
esac
if [ -n "$cmd" ] ; then
echo "selection $selection is '$cmd'"
$cmd
fi
done
Обратите внимание, что он запускает echo "selection $ selection is '$ cmd'
перед выполнением $ cmd
, в противном случае он завершится до echo
, когда $ selection
= 0.
Из примера OP переименование и изменение кажутся довольно последовательными, например, filename.jpg
кажется всегда с префиксом того же пути плюс буква «t», превращающаяся в thumb / tfilename.jpg
. В таком случае можно сделать что-нибудь попроще.
Если все предназначены для каталога "thumb /".
Иметь тестовые файлы abc.jpg, xyz.jpg в текущем каталоге.
Вот пример списка файлов
$ cat testfile
abc.jpg
xyz.jpg
Полезно выполнить тестовую версию команды с эхом, чтобы увидеть, что будет делать код:
$ while read my_file; do
echo cp -a "$my_file" "thumb/t$my_file"
done < testfile
Результат теста:
cp -a abc.jpg thumb/tabc.jpg
cp -a xyz.jpg thumb/txyz.jpg
при чтении my_file; делать ...Синтаксис done
будет обрабатывать stdin построчно использует <
для перенаправления testfile
на stdin, поэтому оператор while читает его
my_file
- это переменная, которую мы создали для хранения ввода, на которую, как мы видим в теле кода, можно ссылаться с помощью $ my_file
cp
использует для распознавания аргументов Если вы удовлетворены результатами тестового эхо-сигнала, мы можем удалить эхо-сигнал, чтобы фактически выполнить команду:
$ while read my_file; do
cp -a "$my_file" "thumb/t$my_file"
done < testfile
Когда вы проверьте каталог thumb /
, вы увидите скопированные туда два тестовых файла.
По умолчанию cp
не дает обратной связи, если нет ошибок. Поэтому, если вы копируете сотни или тысячи файлов, может показаться, что вообще ничего не происходит. Чтобы увидеть обратную связь, используйте подробный параметр -v
:
$ while read my_file; do
cp -av "$my_file" "thumb/t$my_file"
done < testfile
Результат:
`abc.jpg' -> `thumb/tabc.jpg'
`xyz.jpg' -> `thumb/txyz.jpg'