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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.