【问题标题】:shell script - while condition check range failingshell 脚本 - 条件检查范围失败
【发布时间】:2015-10-10 04:56:15
【问题描述】:

我刚开始编写 shell 脚本,出于测试目的,我正在尝试创建脚本供我个人使用。 我有一个家庭文件服务器,我有时会从中同步,我正在尝试创建一个交互式脚本,这样我就可以更轻松地完成 mp3 同步任务。

这是我的脚本:

#!/bin/bash
##############################################
############    MP3 SYNC SCRIPT ##############
##############################################
#### REV: 01 20/07/2015
#### Author: Marcio Ribeiro

echo -e "Sincronizar do storage para o note ( escolha 01 ) ou do note para storage ( escolha 02 ): \n 01 Destino final Note: \n 02 Destino final Storage:"
read  DESTINO
DESTINO_CK=[0]-[12]

    while [ $DESTINO != $DESTINO_CK ] ; do

    read -p "Por favor escolha entre 01 ou 02:" DESTINO
done

echo -e "Digite a letra inicial da banda que deseja utilizar na sincronização em CAPS"
read  LETRA
LETRACK={AZ}

    while [ "$LETRA" != $LETRACK ]; do

    read -p "Digite a letra inicial da banda que deseja utilizar na sincronização em CAP:" LETRA
done

LEFT="/storage/Marcio/Mp3/${LETRA}/"
RIGHT="/data/mp3/${LETRA}/"

if [ $DESTINO = "01" ]; then
    echo -e "`rsync -rvz ${LEFT} ${RIGHT}`; \n `ls -lha ${RIGHT}`"
else
    echo -e "`rsync -rvz ${RIGHT} ${LEFT}`; \n `ls -lha ${LEFT}`"

  fi

我已经掌握了基础知识,现在我正试图将用户交互限制在我真正想要的范围内,但我失败了。 基本上在第一个用户提示上我只想接受 01 或 02 作为输入,而在第二个用户提示上只有一个大写字母。 有人知道为什么我在这么简单的事情上失败了吗?

【问题讨论】:

  • =!= 进行精确匹配,而不是模式匹配。
  • @Barmar:除非在[[ ... ]]
  • echo -e "$(cmd)" 是一种反模式。执行命令即可。

标签: linux bash shell while-loop wildcard


【解决方案1】:

我得到它的工作,它不是一个漂亮的代码或最好的逻辑,但它工作:

!/bin/bash
##############################################
############    MP3 SYNC SCRIPT ##############
##############################################
#### REV: 01 20/07/2015
#### Author: Marcio Ribeiro

echo -e "Sincronizar do storage para o note ( escolha 1 ) ou do note para storage ( escolha 2 ): \n 1: Destino final Note \n 2: Destino final Storage"
read  DESTINO
            until [ "$DESTINO" = "1" ] || [ "$DESTINO" = "2" ];
do
            read -p "Por favor escolha entre 1 ou 2:" DESTINO
done
####
echo -e "Digite a letra inicial da banda que deseja utilizar na sincronização em CAPS"
read  LETRA
LETRA_CK='[A-Z]'

            while [[ "$LETRA" != $LETRA_CK ]];
do
            read -p "Digite a letra inicial da banda que deseja utilizar na sincronização em CAPS:" LETRA
done
####
LEFT="/storage/Marcio/Mp3/${LETRA}/"
RIGHT="/data/mp3/${LETRA}/"

    if [ $DESTINO = "01" ]; then
            echo -e "`rsync -rvz ${LEFT} ${RIGHT}`; \n `ls -lha ${RIGHT}`"
else
            echo -e "`rsync -rvz ${RIGHT} ${LEFT}`; \n `ls -lha ${LEFT}`"

fi

欢迎提出任何改进意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2014-03-31
    • 2011-02-13
    相关资源
    最近更新 更多