Вы можете использовать grep
с -P
, чтобы активировать возможности регулярных выражений Perl, а затем указать диапазон символов Unicode в виде класса символов, как показано ниже в качестве примера (найти свой язык Unicode для замены в классе символов ниже ).
grep -oP '\w*[\x00-\x99]+\w*' infile
Специальная переменная $?
представляет собой статус выхода самой последней выполненной команды. Количество аргументов, переданных скрипту (, количество позиционных параметров )определяется как $#
.
Вы не можете использовать >
для сравнения, является ли значение численно большим, чем другое. Для этого используйте -gt
. Тест >
— это тест для определения порядка сортировки строк (" b
sort после a
, поэтому "b" > "a"
" ).
У вас также нет ]
на одном из тестов.
Я также не уверен, почему вы считываете два значения в интерактивном режиме, если вы ожидаете, что сценарий получит один аргумент в своей командной строке.
Предложение:
#!/bin/sh
if [ "$#" -ne 1 ]; then
echo need exactly one argument >&2
exit 1
elif [ -d "$1" ]; then
printf '"%s" is already a directory\n' "$1" >&2
exit 1
elif ! mkdir "$1"; then
printf 'failed to create directory "%s"\n' "$1" >&2
exit 1
fi
printf 'Successfully created directory "%s"\n' "$1"
$1
, который используется в этом скрипте, является первым позиционным параметром (, первым аргументом, заданным скрипту ).
Промежуточный тест здесь на самом деле не нужен, так какmkdir
(без его опции -p
)будет жаловаться при попытке создать уже существующий каталог, поэтому это будет обнаружено последним тестом.
Этот сценарий будет вызываться, как вы предлагаете в вопросе,
./script.sh "some directory name"