Использование встречного цикла для переменной среды

В Mint 13 xfce: ALT + F1 (главное меню) > Настройки> Рабочие пространства

Там вы просто измените число.

1
29.04.2014, 00:36
2 ответа
[119149]Некоторые непосредственные проблемы:

Использовать [119839]getopts[119840] для обработки аргументов или иметь причину, по которой это не так.

Если в сценарии задано более 1 аргумента, то [119841] "$@"[119842] в третьем [119843]elif[119844] взорвёт его.

Используйте [119845] для f в цикле "$@"[119846] вместо [119847] в то время как [119848] в цикле.

Почему?

Что произойдет, если вы наберете [119849] shunk --help[119850] ... или еще какую-нибудь интересную [119851]mv[119852] опцию?

QED

Simpler => Better

0
28.01.2020, 01:57
#!/bin/sh

junkdir="$HOME/.junk"
do_list=false
do_purge=false

while getopts 'lp' opt; do
    case "$opt" in
        l) do_list=true  ;;
        p) do_purge=true ;;
        *)
            printf 'Usage: %s [-l|-p] [ name... ]\n' "$0" >&2
            exit 1
    esac
done

shift "$(( OPTIND - 1 ))"

if [ ! -d "$junkdir" ] && ! "$do_purge"; then
    printf '%s: Missing junk directory "%s"\n' "$0" "$junkdir" >&2
    printf '%s: Re-run with -p to create it\n' "$0" >&2
    exit 1
fi

if "$do_list"; then
    printf 'Current junk in "%s":\n' "$junkdir"
    ls -l "$junkdir"
fi

if "$do_purge"; then
    printf 'Emptying junk directory "%s"\n' "$junkdir"
    rm -rf "$junkdir"
    mkdir "$junkdir"
fi

if [ "$#" -eq 0 ]; then
    exit
fi

echo 'Junking the following things:'
printf '%s\n' "$@"

mv "$@" "$junkdir"

Этот сценарий реализует то, что вы пытаетесь сделать. Он использует getoptsдля разбора флагов командной строки -lи/или -p.

Я устанавливаю do_listи do_purgeв цикле while, который анализирует параметр командной строки, потому что я хочу контролировать порядок, в котором lsи rmрасположены ниже. Если пользователь использует -lpили -pl, я хочу, чтобы они увидели содержимое каталога нежелательной почты до того, как он будет удален.

Удаление ненужного каталога с помощью -pтакже создает его заново. Я делаю это с помощью rm -rf, за которым следует mkdirдля простоты.

После цикла синтаксического анализа командной строки я корректирую позиционные параметры так, чтобы они содержали только не -аргументы опций (имена файлов и/или каталогов ).

Если нет позиционных аргументов,($#равно нулю ), я не пытаюсь запустить mv, чтобы переместить файлы в ненужный каталог.

0
28.01.2020, 01:57

Теги

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