Многообразные условия bash

У меня есть следующий кодекс:

#!/bin/bash
while true
do
  cat <<-EOF
MENÚ DE COPIAS DE SEGURIDAD
1       Copia manual de un directorio
2       Copia manual de un fichero
3       Añadir tareas a CRON
4       Ver lista de tareas automatizadas de CRON
5       Salir
EOF
  read respuesta

  case $respuesta in
    1)  echo "Introduzca el directorio de origen"
                read directorio
        echo "Introduzca la ruta de destino"
                read destino
                        if [ -d $directorio ] && [ -d $destino ]
                                then
                                        cp -r $directorio $destino
                        else
                                echo "Introduzca una ruta válida"
                        fi;;
    2) echo "Introduzca el directorio de origen del fichero"
        read fichero
        echo "Introduzca la ruta de destino"
        read destinof
                if [ -d $fichero ] && [ -d $destinof ]
                        then
                                cp -r $fichero $destinof
                else
                        echo "Se ha equivocado"
                fi;;
    3) echo "Bienvenido a CRON"
        crontab -e;;
    4) echo "Lista de tareas activas:"
        crontab -l;;
    5) echo "Hasta luego"
        exit;;
    *) echo "Debe escoger una opción válida";;
  esac
done

Но во время выполнения этого, мне дает ошибку в линии 29, я думаю, что Вы из-за многообразного условия IF, но не уверен. Я издаю: ошибка точно эта: copiaseguridad.sh: 29: [: "/home/rafa/Documentos/Hacklab: unexpected operator

0
задан 18.10.2016, 18:52
3 ответа

У тебя есть проблема с маршрутами, которые содержали бы место в мишени (так в имени каталога как файла).

Ты можешь решать это разграничивая контент переменных (используй или нет форму, которую он говорит тебе @PaulRM) о следующем способе:

[ -d "$fichero" ] && [ -d "$destinof" ]

Глаз, я не исправил тип доказательства (-d чтобы подтверждать существование каталогов и -f для файлов).

Также ты был бы должен разграничивать линии, в которых ты использовал бы вышеупомянутые маршруты как параметры, как эта:

cp -r "$fichero" "$destinof"

Приветствие.

1
ответ дан 24.11.2019, 13:03

Меняет линию 29

if [ -d $fichero ] && [ -d $destinof ]

в

if [ -f $fichero -a -d $destinof ]
0
ответ дан 24.11.2019, 13:03
  • 1
    оба оператора - в и & & они действительные. я не думаю, что это проблема – lois6b♦ 18.10.2016, 18:55
  • 2
    Оно не функционирует, продолжает давать ту же ошибку – ras212 18.10.2016, 19:03
  • 3
    @ras212 я не понимаю, как у тебя есть та же ошибка, но с другой стороны вижу, что: в линии 29, ты спрашиваешь о файле с-d if [ -d $fichero ] быть должным и # 237; когда его быть if [ -f $fichero ] – PaulRM 18.10.2016, 19:13
  • 4
    @PaulRM-d служи для того, чтобы подтвердить, что существовал файл и кроме того это был каталогом (папкой).Su изменчивая llam и # 243; файл (к несчастью), потому что " Введите исходный каталог fichero".-f - это, чтобы подтверждать, что он существовал и был регулярным файлом. tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html – lois6b♦ 19.10.2016, 09:02
  • 5
    Действительно, это - то, что quer и # 237; чтобы говорить – ras212 20.10.2016, 20:48

Эта та soluciГіn:

#!/bin/bash
while true
do
  cat <<-EOF
MENÚ DE COPIAS DE SEGURIDAD
1   Copia manual de un directorio
2   Copia manual de un fichero
3   Añadir tareas a CRON
4   Ver lista de tareas automatizadas de CRON
5   Salir
EOF
  read respuesta

  case $respuesta in
    1)  echo "Introduzca el directorio de origen"
        read directorio
    echo "Introduzca la ruta de destino"
        read destino
            if [ -d $directorio ] && [ -d $destino ]
                then
                    cp -r $directorio $destino
            else
                echo "Introduzca una ruta válida"
            fi;;
    2) echo "Introduzca el directorio de origen del fichero"
    read fichero
    echo "Introduzca la ruta de destino"
    read destinof
        if [ -f $fichero ] && [ -d $destinof ]
            then
                cp -r $fichero $destinof
        else
            echo "Se ha equivocado"5
        fi;;
    3) echo "Bienvenido a CRON"
    crontab -e;;
    4) echo "Lista de tareas activas:"
    crontab -l;;
    5) echo "Hasta luego"
    exit;;
    *) echo "Debe escoger una opción válida";;
  esac
done

Пытается: introducir la descripción de la imagen aquí

0
ответ дан 24.11.2019, 13:03
  • 1
    #191; " и #201; sta - soluci и # 243; n"? и #191; Цюй и # 233; ты изменился, чтобы это упорядочивать? – OscarGarcia 01.11.2016, 22:50
  • 2
    Я поместил пару и # 225; метры-d и-f хорошо. это была ошибка. Я не понял – ras212 01.11.2016, 22:57
  • 3
    Дело в том, что copi и # 233; и pegu и # 233; твой рукописный шрифт в моем м и # 225; хина, чтобы воспроизводить твою проблему и и #250; nicamente выйди и # 237; в твою ошибку, если помести, и # 237; в маршруты с местом в мишени (я помещаю такие /tmp mal как маршрут): pruebas.sh: línea 29: [: /tmp: se esperaba un operador binario. Если я делаю modificaci и # 243; n, что t и # 250; ты говоришь, что он продолжает не удаваться в точно в самой l и # 237; nea с тем же сообщением ошибки. В часть этого, если это был @PaulRM тот, кто встретил тебе soluci и # 243; n, быть должным и # 237; схвати проголосовать раньше за Ваш ответ как правильная и давать ему точки reputaci и # 243; n в и #233; l. – OscarGarcia 02.11.2016, 10:36
  • 4
    Я поместил маршрут между кавычками – ras212 04.11.2016, 21:20
  • 5
    #191; И помещая маршрут между кавычками ты способен воспроизводить проблему, которую имей, и # 237; эксперт, выдвинутый оригинально? – OscarGarcia 04.11.2016, 22:08

Теги

Похожие вопросы