BASH: Получить номер буквы в латинском алфавите.
Вопрос был задан студенту-первокурснику преподом на зачете по Linux. Студент на вопрос не ответил и вчера ушел на пересдачу, впрочем, задав вопрос мне. Думаю, формулировка задания понятна. Я, кстати, сначала тоже запарился, и начал выдумывать всякие дикие варианты с получением кода символа, преобразованием кода символа в номер буквы латинского алфавита, потом подумал, что иметь секс с локалью (разбирайся еще, юникод не юникод) не стоит, и родил вот такое простое решение с помощью цикла
for
и оператора if
.Нужную букву будем брать из параметра командной строки скрипта.
#!/bin/bash
#get number of latin letter in alphabet
#use nlett <letter>, e.g nlett a
SNUM=1
for SYMB in {a..z}; do
if [[ "$SYMB" == "$1" ]]; then
break
else
let "SNUM=SNUM+1"
fi
done
echo "$1 is $SNUM"
Перебираем в цикле все буквы от
a
до z
, нашли нужную - выводим номер, не нашли - увеличиваем счетчик $SNUM
.Чтобы отсчет шел с
0
, просто присваиваем начальному значению счетчика 0
:SNUM=0
Чтобы пользователь не ввел ничего лишнего, а только маленькую латинскую букву, можно добавить проверку перед циклом
for
:SFND=`echo $1|grep '^[a-z]$'`
if [ -z "$SFND" ]; then
echo "Error: in first parameter must be one small latin letter!"
exit 1
fi
И заменить в цикле и далее
$1
на $SFND
.На PasteBin
На GitHub
Есть и более элегантное решение.
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/06/04/bash-p