Bash : 조건 (if-then-else)

안녕하세요.

이번에는 조건이있는 스크립트를 만드는 방법을 보여 드리겠습니다. 강타, 번역 :

원하는 X 작업이 완료되면 Y 동작이 수행되고, 완료되지 않으면 다른 동작이 수행됩니다.

간단한 설명 no 😀

이제 몇 분 동안이 튜토리얼에서 사용할 몇 가지 예를 생각했습니다. 다음과 같은 딜레마 / 문제 / 상황이 발생했습니다.

우리는 회사 네트워크에 있고 X 컴퓨터가 네트워크에 연결되어 있는지 알고 싶습니다. 이를 위해 우리는 스크립트 그는 무엇을 할 것인가 해당 컴퓨터를 향하고 네트워크에있는 경우 (즉, )은 예, 네트워크에 있음을 알려줍니다. 그렇지 않으면 (네트워크에 없음) 네트워크에 없음을 알려줍니다.

이 작업이 완료되면 이제 조건으로 순환하는 방법을 설명하겠습니다 🙂

다음은 코드입니다.

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

걱정하지 마세요. 자세히 설명하겠습니다 😉

사용할 명령이며 해당 PC가 네트워크에 있는지 알려줍니다. 네트워크에 연결되어 있는지 확인하려는 PC를 알려 주려면 변경해야합니다. IP 주소 분명히 우리가 확인하려는 PC의 IP 주소로.

보시다시피«-c 1«, 우리에게 필요합니다. 우리가 컴퓨터를 핑할 때,이 동작은 우리 자신을 누를 때까지 멈추지 않습니다 (핑). [Ctrl] + [C], 그래서«-c 1»우리는 한 번만 확인 (핑 시도 만)하고 다른 확인은 수행하지 않도록 지시합니다. 이렇게하면 즉시 중지됩니다. 즉, 컴퓨터가 네트워크에 한 번만 있는지 확인합니다.

이것에 대해 의심이 있다면 고통은 없습니다 ... 그들은 그렇게 말하고 다시 당신에게 그것을 설명하게되어 기쁩니다 😉

이제주기가옵니다. 방금 설명한 것은 정상적인 명령 / 행동에 지나지 않기 때문입니다 😀

if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

이를 이해하기 위해 Bash의 매우 중요한 세부 사항을 설명하겠습니다 🙂

주제에 대해 가장 잘 알고있는 사람은 저를 틀리게 만들 수 있습니다.하지만 초보자 나 덜 전문가를 위해이 글을 씁니다.

에서와 같이 발생합니다. 강타 그것은 마치 0 y 1즉, 명령이나 작업이 실행될 때 살아 있거나 죽었습니다. 잘 실행 문제 없어요 (1)와, 약간 있었다 문제 또는 오류 (0).

우리는 X 행동이나 명령을 수행하고 우리가 한 일이 잘 수행되거나 잘못 수행되었을 수 있으며 오류가 있었는지 여부가 여기에 세부 사항이 있습니다 😉

우리가 할 일을 보내는 경우 (이 경우 : ping -c 1 IP-ADDRESS) 오류가 발생하지 않았으며 성공 했으므로 다음 값을 반환합니다. 1 . 그렇지 않고 작업 (즉, ping)이 성공하지 못한 경우 값을 반환합니다. 0.

 마지막으로 위 코드가 의미하는 바는 다음과 같습니다.

값 0이 반환되면

텍스트 표시 :«네트워크에 없음»

그렇지 않으면 (0이 아니라 1이 반환 됨)

텍스트 표시 :«네트워크에있는 경우«

제가 방금 설명 드린 내용은 앞으로 많은 일에 도움이 될 것입니다. X 액션이 오류를 주면 Y 액션을하고, X 액션이 오류를주지 않으면 Z 액션을한다고 말할 수있는 것이 정말 유용하기 때문입니다.

나는 어떤 사람들이 약간 관여 할 수도 있다는 것을 알고 있기 때문에 모든 사람들이 어떤 식 으로든 이해하도록 노력하면서 여러 가지 방법으로 설명하려고 노력했습니다. 의심스러운 사람이 있으면 알려주십시오.

이제 스크립트를 만들어 봅시다 😀

이 자습서의 단계를 따라야합니다. Bash : 실행 가능한 스크립트를 만드는 방법

그런 다음 다음 코드를 해당 파일 (스크립트.sh), 마지막에«출구»(따옴표 제외) :

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

다음과 같이 표시되어야합니다 (IP-ADDRESS를 원하는 IP로 변경 했어야 함).

여기에서 실행중인 스크립트를 볼 수 있습니다.

% CODE1 %

 

보시다시피 결국 그는 우리에게«예, 네트워크에 있습니다.»🙂

여기서 중요한 것은 그들이 조건에 대해 실제로 이것을 이해한다는 것입니다. 그래서 다시 설명하기 위해 또 다른 코드를 남기지 만 다른 관점에서 보겠습니다.

read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi

이것이 의미하는 것은 간단합니다. 설명을 한 줄씩 남겨 둡니다.

첫 번째 줄 : 우리가 쓰는 것은 변수«본문»(따옴표 제외).

두 번째 줄 : 변수의 내용 (방금 작성한 내용)이 3.

첫 번째 줄 : 인 경우 3, 텍스트«수정»(따옴표 제외).

네 번째 줄 : 그렇지 않으면 (즉, 3을 작성하지 않은 경우).

네 번째 줄 : «텍스트가 표시됩니다.틀렸다»(따옴표 제외).

네 번째 줄 : 조건의 끝.

그들이 깨달을 수 있었던 것처럼 우리가 에코 그리고 큰 따옴표 사이 («) 텍스트를 입력하면 해당 텍스트가 터미널에 표시됩니다. 즉, 다음과 같이 입력하면 :

echo "esto es una prueba"

터미널에 텍스트가 표시됩니다. 이것은 시험이다.

하지만이 두 번째 예제로 돌아가서, 아주 간단한 것으로 두 번째 스크립트의 유용성과 실행을 보여 드리겠습니다. 😀… 일반적인«1 + 2는 얼마입니까?«

완전한 스크립트의 코드를 남깁니다.

#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit

스크립트 작동 방식은 다음과 같습니다.

% CODE2 %

 

그리고 더 이상 추가 할 것은 없습니다.

이것은 초등적이고 단순한 것입니다.하지만 모든 사람이 프로그래머의 영혼을 가지고있는 것은 아니기 때문에 가능한 한 잘 설명하려고 노력했습니다. 여러 번 우리는 이와 같은 (또는 유사한) 스크립트를 만들어야합니다. 어쨌든이 기사가 여러분에게 유용하기를 바랍니다. 누군가 🙂

의심이나 질문, 불만 또는 제안이 있으시면 여기에 남겨주세요. 기꺼이 답변 해 드리므로 우리 모두 조금 더 배우게됩니다 😀

안부


기사의 내용은 우리의 원칙을 준수합니다. 편집 윤리. 오류를보고하려면 여기에.

23 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   잘스

    당신은 프로입니다! *또는*

    1.    KZKG ^ 가아라

      아뇨 😀
      그것이 당신에게 봉사하고 흥미 롭다면 만족합니다 😉

      인사 친구

  2.   적절한

    @ KZKG ^ 가아라,
    bash 프로그래밍에 대해 질문이 있습니다.
    이 VAR = hello와 같은 변수를 선언하는 것과이 VAR = $ {VAR : -hello}와 같은 변수를 선언하는 것의 차이점은 무엇입니까?

    내가 설명한다:
    http://pastebin.com/a3cfWXeD

    인사 😉

    1.    KZKG ^ 가아라

      안녕하세요.
      글쎄, 나는 bash의 전문가가 아닙니다 ... 사실, 나는 LOL을 모릅니다 !!
      변수를 선언하면 다음과 같습니다.
      : ${OPTFOLDER:="/opt/"}

      하지만 항상 이렇게했기 때문에 솔직히 그 차이가 뭔지 모르겠어요 🙁

  3.   적절한

    @ KZKG ^ 가아라
    사실은 나도 몰랐기 때문에 질문을했습니다. 저는 보통 SlackBuilds를 작성하고 VAR1에서 선언 된 변수가 이러한 스크립트에 풍부하다는 사실을 알고 있습니다. 빠른 Google 검색은이 질문을 명확히하는 데 도움이되었으며, 우리 모두가 배울 수 있도록 모든 사람과 공유합니다.

    스크립트:
    http://pastebin.com/faAQb35w

    설명:
    VAR = $ {VAR : -default_value} 형식의 변수 선언은 값이 null이거나 존재하지 않는 경우에만 변수 VAR이 default_value 값을 취함을 의미합니다.

    실제 예 :
    스크립트를 실행할 때 VAR 변수에 저장할 값을 입력하라는 메시지가 표시되며, 무언가를 입력하면 입력 된 내용이 표시됩니다. 아무것도 입력하지 않고 Enter 키를 누르면 VAR 변수를 null로 선언하므로 default_value가 표시됩니다.

    인사말.

    1.    KZKG ^ 가아라

      하하 몰랐어요 😀
      좋아요, 정말 고마워요 친구 ... 그게 제가 기사의 끝에서 의미했던 것입니다. 저는 무언가를 가르치고 싶지 않으며 그게 전부입니다. 저는 항상 여기서 새로운 것을 배울 것임을 압니다 😀

      다시 한 번 인사와 감사합니다.

      1.    적절한

        당신 말이 맞습니다. 여기서 몇 가지를 배웁니다.

        인사와 즐거운 휴일 !! 😀

  4.   루카스 마티아스

    위대하고 훌륭하게 설명 +1, 시간이 걸릴 것입니다 ...
    그러나 나는 노력할만한 가치가 있습니다 😉

    1.    KZKG ^ 가아라

      사실 저는 하루 만에 80 %를 썼습니다. 인터넷이 허락하지 않아서 출판하는 데 너무 오래 걸렸습니다.
      귀하의 의견에 감사드립니다 😉

  5.   휴고

    이를 수행하는 또 다른 방법은 DNS를 사용하는 것입니다. 때로는 네트워크에서 ICMP 프로토콜이 차단되기 때문입니다.

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "네트워크에 연결됨"

    또한이 예에서 반환 값 검사가 암시적임을 알 수 있습니다 😉

    1.    KZKG ^ 가아라

      당신은 항상 친구처럼, 내가 완전히 모르는 팁으로 HAHAHA.
      감사합니다. 댓글에 감사드립니다. 헤헤 ... 제가 배운 또 다른 새로운 것 😀

  6.   데이턱스

    감사합니다

    ????

  7.   Leper_Ivan

    이 주제가 발표 된 지 며칠이 지났지 만 지금은 bash로 대본을 만들었 기 때문에 많은 도움이되었습니다 .. 감사합니다 Gaara ..

  8.   에드가 나 바로

    박사님, 도움을 주셔서 감사합니다.

    한 컴퓨터가 자동으로 핑을 중지하면 다른 컴퓨터가 IP를 변경하려면 어떻게해야합니까? 나는 이것을 가지고있다.

    IP를 변경하려면
    #! / bin / bash
    ping -c 10 # 자동으로 핑하지 않는 경우
    ifconfig eth0 192.168.1.50 넷 마스크 255.255.255.0 브로드 캐스트 192.168.1.0
    ifconfig eth0 다운
    ifconfig eth0 위로

  9.   아브라함

    물음표를 사용하는 경우와 비교할 때? 두는 것 사이에 어떤 차이가 있습니까? 다른 편지

    1.    KZKG ^ 가아라

      $? '이전 출력 또는 출력'을 의미합니다. 즉, 이전 명령의 결과 인 경우 ... 🙂

      1.    앤드류

        동일한 결과를 얻을 수있는 또 다른 방법이 있습니다. if에 대한 인수로 직접 ping 명령을 전달합니다.

        ping -c 1 IP-ADDRESS; 그때
        echo "예, 인터넷에 있습니다."
        그렇지 않으면
        echo "네트워크에 없음"
        fi

        인수로 전달한 명령의 반환 값을 평가하면 0을 반환하면 true이고 다른 것은 false입니다. 대괄호는 test 명령과 동일합니다. 그러나 모든 명령을 인수로 전달할 수 있습니다 (명령이 일부 값을 반환하는 한).

  10.   안부

    안녕하세요, 스크립트에서 사용자 X로 script.sh를 어떻게 실행합니까? 사용자 Y를 만들고 해당 사용자 Y는 script.sh를 계속 실행합니다.

    이것을 할 수 있습니까?

  11.   국토스

    매우 흥미 롭습니다, 감사합니다!

  12.   시스코

    기여 해주셔서 감사합니다, 나는 그것을 xD 이해하는데 한 시간이 지났지 만 이해했습니다 !!!!.

  13.   Eloy

    스크립트는 괜찮습니다. 산술적으로 0과 같으면 네트워크에 있지 않고 그렇지 않으면 네트워크에있는 경우 ($? == XNUMX)로 수행 할 수도 있습니다. 그리고 좀 더 상호 작용 적으로 만들고 싶다면 다음과 같이 말할 수 있습니다.
    echo -n IP 입력 :
    ip 읽기
    핑 -c 1 $ ip

  14.   다리오

    안녕하세요, 저는 이것에 매우 익숙합니다. 읽기를 통해 티켓 번호 (영숫자)를 만들려고합니다. 입력 한 내용이 올바른 형식 (ABC-123456)이면 "x"명령을 실행하고 싶습니다. 어떻게해야할지 모르겠네요. 도와 주 시겠어요?

    echo "티켓 입력"
    -p 티켓 읽기

    if $ ticket = "모름 (형식 ABC-123456"); 그런 다음 cp file.txt $ ticket; else echo "잘못된 형식입니다. 다시 시도하십시오"; 읽기 -p; fi.

    물론 끔찍하고 그들은 하하 웃지 만 내가 말했듯이 나는 이것으로 시작하는 것입니다.

    내가 잘못 설명하면 제게 말하고 더 잘하려고 노력합니다.

    모두를 안아주세요.

  15.   움베르토 Y

    훌륭한 설명, 인사