2015-01-23 4 views
0

У меня есть концепция bash, теперь я нашел сайт, полный загадок для практики bash. Я решаю несколько сценариев (вы должны отметить, что они делают то, что они пропали без вести или так, в зависимости от вопроса), и я наткнулся этот скрипт:Сценарии в sed - linux

random_var="$(echo $1 | sed -e 's/[^[:alnum:]]//g')" 

Поправьте меня, если я ошибаюсь, о мой основной предположения о следующем коде:

  • $ 1 являются вторым аргументом, что получил сценарий (когда первое это имя сценария)
  • Существует трубопровод между вторым аргументом и sed скриптом, который удаляет все альфа-числовой и ... согласно тому, что я понимаю, этот сценарий может быть «сломан» с помощью разделителя например [/\]^$ и так?

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

#!/bin/sh 

func() 
{ 
    somevar="$(echo $1 | sed -e 's/[^[:alnum:]]//g')" 

    if [ "$somevar" != "$input" ] ; then 
    return 1 
    else 
    return 0 
    fi 
} 

# Sample usage of this function in a script 

echo -n "Enter input: " 
read input 

if ! func "$input" ; then 
    echo "HELL NO" 
    exit 1 
else 
    echo "YES!" 
fi 

exit 0 
+2

'sed скрипт, который удаляет все альфа-числовые ошибки. Он удаляет все не буквенно-цифровые символы. –

+1

Кажется, у вас есть идея, так как вы объяснили это правильно, за исключением неправильного толкования регулярного выражения, которое происходит, и @AvinashRaj исправил вас. Где вы запутались? Сейчас трудно ответить на ваш вопрос. – suiterdev

ответ

1

Сценарий проверяет строку, чтобы увидеть, содержит ли она какие-либо неалфавитно-цифровые символы.

Как отмечает Авинаш в комментариях, команда sed удаляет все символы без буквенно-цифровых символов. Внутри функции $input имеет то же значение, что и в области вызова, которое также совпадает с первым аргументом $1. Это, возможно, немного запутывает ...

Если $somevar отличается от $input (=$1), то это означает, что sed каким-то образом изменил строку. Поэтому строка должна содержать по крайней мере один символ без буквенно-цифровых символов.

Если функция возвращает 1 (на входе присутствовали некоторые не-буквенно-цифровые символы), то ! func является ложным, поэтому ветвь else будет выполнена, и скрипт вернется с кодом выхода 0 (успех). В противном случае скрипт вернет ненулевой код выхода, указывая на сбой.

+1

Спасибо! – Jack

Смежные вопросы