LINUX.ORG.RU

Проверка введенных данных в bash-скрипте.


0

0
Например, необходимо написать скрипт, которые предлагает пользователю выбрать каталог, содержимое которого необходимо просмотреть (из корня допустим):

#!/bin/bash

dev=($(ls /))
dev_count=${#dev[@]}
for ((i=0;i<dev_count;i++)) do
echo " "$i" for "${dev[i]}
done

echo -n "Enter number: "
read target_num

# ???

ls -lh "/"${dev[target_num]}

Как бы теперь перед последней строчкой сделать проверку - является ли target_num числом в диапазоне от [0..(dev_count-1)]?

ЗЫ Или может подобный выбор можно реализовать проще?
эээ...

let x=dev_count-1
if [ "$target_num" -gt 0 && "$target_num" -lt "$x" ]; then
    echo "HABA-HABA"
fi

ЗЫ а ты проверяешь является ли $target_num числом :)
ЗЗЫ ты сначала advanced bash scripting почитай, потом уже на форум пиши.
ЗЗЗЫ а "башизм" сдесь не любят :)
true_admin ★★★★★
()
Ответ на: комментарий от true_admin
>ЗЫ а ты проверяешь является ли $target_num числом :) Ээээээ.... это как бэ часть вопроса же.
omegatype ★★★
() автор топика
Ответ на: комментарий от Demon37
В упор не увидел там решения. До принадлежности диапазону дойти конечно можно по гайду, но там не расммотрен случай, когда вводится строка.
omegatype ★★★
() автор топика
Ответ на: комментарий от omegatype
> но там не расммотрен случай, когда вводится строка.

а вот за этим пожалуйте в гугл. Вопрос не так прост как кажется.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin
И что за фигня? "[0..dev_count)" надо "[0;dev_count)".
omegatype ★★★
() автор топика
Ответ на: комментарий от omegatype
мотивировано тем что там всё решено десятком способов с подробным разбором как это делается.
true_admin ★★★★★
()
Не понял, почему не весь аргумент echo в кавычках?. ИМХО, так выглядит лучше:

echo " $i for ${dev[i]}"

По поводу проверки, число или не число, как вам уже сказали, проблемма не тривиальна. То есть можно делать:

a=n
let a=target_num-1 2>/dev/null
["$a" == n ] && error

или, раз уж есть массивы (башизмы) то можно и "typeset -i target_num"

Но, замечу, что для bash'а строка "07" это число, а 08 --- не число.


mky ★★★★★
()
Ответ на: комментарий от val-amart
> у меня есть машины с питоном и перлом, но без баша.

Ну и что? Если я пишу прогу на яве, я отдаю себе отчёт, что для запуска придётся ставить jre. С башем аналогично.

const86 ★★★★★
()
Ответ на: комментарий от const86
_ты_ отдаешь, и отлично. но многие предполагают, что баш в системе есть всегда. это не так, и использование баша в этом контексте хуже перла, который есть почти везде, часто даже в ембеддед
val-amart ★★★★★
()
Ответ на: комментарий от val-amart
там где работают мои скрипты он есть потому что это мой логиншелл :).
true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.