Мне нужно написать сценарий оболочки, который принимает один или несколько аргументов (имена файлов). Имена файлов должны обрабатываться корректно независимо от того, содержат ли они пробелы. Для каждого файла сценарий должен проверять, является ли файл доступным для чтения, записываемый, исполняемый, является простым файлом и является каталогом. Для каждой из этих проверок a или Y следует помещать в соответствующий столбец. Если файл не существует, в каждом из полей должны быть помечены символы «---».Анализ файлов в командной оболочке
Example output:
Read Write Execute Plain Dir Filename
Y Y Y Y N /tmp/testfiles/executable
Y Y N Y N /tmp/testfiles/file with spaces
Y N N Y N /tmp/testfiles/justread
N Y N Y N /tmp/testfiles/justwrite
N N N Y N /tmp/testfiles/noperms
--- --- --- --- --- /tmp/testfiles/nosuchfile
Y Y N Y N /tmp/testfiles/readwrite
Y Y Y N Y /tmp/testfiles/somedir
Я не очень хорошо знаком со сценариями оболочки UNIX, но после прочтения различных статей в Интернете, я придумал следующее решением.
#! /bin/sh
echo Read Write Execute Plain Dir Filename
argnum=0
while $argnum < $# do
FileExists $($argnum)
PrintFileName $($argnum)
done
function FileExists()
{
if test -e $1
then
IsReadable $1
IsWritable $1
IsExecutable $1
IsPlain $1
IsDir $1
else
echo --- --- --- --- ---
}
function IsReadable()
{
if test -r $1
then
echo Y
else
echo N
}
function IsWritable()
{
if test -w $1
then
echo Y
else
echo N
}
function IsExecutable()
{
if test -x $1
then
echo Y
else
echo N
}
function IsPlain()
{
if test -f $1
then
echo Y
else
echo N
}
function IsDirectory()
{
if test -d $($argnum)
then
echo Y
else
echo N
}
function PrintFilename()
{
echo $1
}
К сожалению, сценарий не выполняется должным образом. Я знаю, что есть проблемы (особенно с форматированием), но я не уверен, как их исправить. Любая помощь/предложения, которые у вас есть, будут очень оценены.
«К сожалению, сценарий не выполняется должным образом». Что правильно? Можете ли вы присоединить текущий вывод? – SuperSaiyan
Чтение Write Execute Plain Dir Filename ./script: строка 7: ошибка синтаксиса рядом с неожиданным токеном 'done ' ./script: строка 7:' done' – user2990676
Вам нужно добавить «или» вокруг строк, чтобы избежать проблем с whitespace. – Johan