모든 프로그램에서 유용한 쉘 스크립트

강타 주문을 해석하는 기능을 가진 컴퓨터 프로그램입니다. 그것은 껍질을 기반으로합니다 유닉스 프로젝트를 위해 작성되었습니다. GNU 대부분의 배포판에서 기본 셸 GNU / 리눅스. 그의 이름은 본 어게인 쉘 (또 다른 쉘본), 단어 놀이 만들기 (다시 태어난다는 것은 중생을 의미합니다)본 쉘 (sh), 유닉스의 최초의 주요 인터프리터 중 하나였습니다.

오늘은 개발자에게 매우 유용 할 수있는 몇 가지 셸 스크립트를 보여 드리겠습니다. 대부분은 모든 쉘에서 작동합니다. 유닉스, 일부는 강타.

권한이없는 사용자가 스크립트를 실행하지 못하도록 방지

일부 스크립트는 관리 작업을 수행하므로 루트 사용자 만 스크립트를 실행하도록 할 수 있습니다. 이 경우 다음과 같이 사용할 수 있습니다.

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

특정 사용자에게만 스크립트 실행 허용

위의 코드와 유사하게 특정 사용자 만 스크립트를 실행하도록 할 수 있습니다. 우리는 그렇게합니다 :

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

서비스 / 프로세스가 실행 중인지 확인

실행중인 서비스 나 프로그램의 프로세스가 있는지 알고 싶다면이 스크립트를 사용할 수 있습니다. (이 경우에는 악마가 아파치 실행 중):

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

잠금 파일 만들기

때로는 스크립트가 동시에 두 번 이상 실행되지 않도록해야합니다. 이를 위해 잠금 파일을 사용할 수 있습니다. 다음은이 작업을 수행 할 수있는 간단한 스크립트 버전입니다.

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

이 경우 파일이 무엇이든 잠금 있다. 존재하는 경우 스크립트는 작업을 실행하지 않습니다. 존재하지 않는 경우 파일을 만들고 실행해야하는 작업을 실행 한 다음 제거합니다. 그러나 이것은 전적으로 신뢰할 수있는 것은 아닙니다. 스크립트가 실행되는 동안 갑자기 닫히면 어떨까요?

이 경우 잠금 파일은 삭제되지 않으므로 스크립트를 다시 실행할 수 없습니다. 이러한 경우를 다루기 위해 스크립트가 예기치 않게 종료되는 경우 명령을 실행할 수있는 trap 명령을 사용할 수 있습니다. 이것은 잠금 파일 내에서 실행하는 스크립트의 PID도 저장하는 고급 버전입니다.

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

명령을 좀 더 잘 이해합시다 트랩. 구문은 기본적으로 다음과 같습니다. 트랩 명령 신호 [신호…]; 여기서 signal은 포착하려는 종료 신호입니다. 사용 가능한 신호 목록을 보려면 kill -l 명령을 실행할 수 있습니다. 이전의 경우 INT 신호가 사용되었습니다. (Ctrl + c로 생성 된 종료 캡처), 기간 (kill 명령에 의해 생성 된 종료) 및 EXIT (실행할 줄이 더 이상 없거나 exit 명령이 나오기 때문에 스크립트가 정상적으로 종료 됨).

옵션 메뉴

사용자가 일련의 옵션을 선택할 수있는 메뉴를 만들려면 다음 구성표를 사용할 수 있습니다.

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

스크립트를 실행하기 전에 확인 요청

때때로 사용자가 명령문 배치의 실행, 즉 사용자에게 예 또는 아니오를 입력하도록 요청하는 일반적인 메시지를 확인하도록하는 것이 유용합니다. 다음과 같이 할 수 있습니다.

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

기사의 끝. 간단합니다 😀

편집하다: 어떤 이유로 나오지 않는 공백과 탭에주의해야합니다.


코멘트를 남겨주세요

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

*

*

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

  1.   KZKG ^ 가아라

    씨발 그들은 대단해 O_O ... 내가 Bash에서하는 작은 일에 많은 도움이 될 것입니다 😀

  2.   ren434

    대본이 엄청나 네요! 정말 대단한 공헌 이었어요. 제가 찾던 것뿐이에요.

    추신 : 포럼이 다운되었습니다.

    1.    KZKG ^ 가아라

      예, 포럼이 마운트 된 서버는 오프라인 상태입니다. 이유를 알 수 없습니다. 우리는이를 처리하는 친구에게 이메일을 썼습니다.

      인사말.

  3.   ren434

    오 글쎄, 심각하지 않기를 바랍니다.

  4.   왼손잡이

    그 "chaff"도 Code Ninja에 포함 되었습니까? XD

  5.   타레 곤

    나는 bash 😉의 힘을 좋아하고 그들은 C 언어가 무엇인지 말해주었습니다 ... 음, 쉘 스크립트에는 많은 친숙한 명령이 있습니다.

  6.   크리스토퍼

    고마워 정말 좋았어

  7.   엔젤 블레이드

    입력 매개 변수의 유효성 검사는 매우 유용합니다. 메뉴 만드는 법을 몰랐습니다 =)

  8.   휴우가 _ 네지

    큰…. 이제 내 스크립트 츄 로스에 약간의 "딱딱함"을 줄 수 있습니다.

  9.   갈가마귀

    CodeNinja의 겸손한 작업이 국제적인 Linux 커뮤니티에 어떻게 도움이되는지 확인하게되어 기쁩니다.

    1.    KZKG ^ 가아라

      맑은! 🙂
      모든 것이 함께 돕고 기여하는 것이지 불꽃을 만드는 것이 아닙니다. 😉

  10.   디에고

    실행중인 프로세스 스크립트는 알고 싶은 프로세스를 선택하는 옵션을 추가하여 약간 개선 할 수 있습니다. 다음과 같이 표시됩니다.

    #! / bin / bash
    echo "서비스 선택"
    서비스 읽기
    # 서비스 = 'mysql'
    ps 도끼 | grep -v grep | grep $ SERVICE> / dev / null
    그때
    echo "$ SERVICE 서비스가 실행 중입니다"
    그렇지 않으면
    echo "$ SERVICE 서비스가 중지되었습니다."

  11.   후아 카를로스 C

    나는 당신의 스크립트로 매우 실용적이지만 내가 가진 문제를 해결하기 위해 다음과 같은 특수 스크립트를 찾고 있습니다. 우리는 내부 사용자가 텔넷으로 액세스하여 특수 애플리케이션을 실행하는 회사에 애플리케이션 서버를 가지고 있습니다. 라이센스의 경우 사용자는 두 개 이상의 텔넷을 남용하고 열어 두 개 이상의 라이센스를 가져 오므로 어떤 방법으로 어떤 텔넷 프로세스가 2 시간 이상 비활성 상태인지 확인하여 킬을 보내는 것으로 생각했습니다. 그 pid에게, 당신은 나를 도울 수 있습니까?

    1.    디에고

      다음 프로그램을 설치하십시오

      적성 설치 자동 로그

      그리고 /etc/autolog.conf에 구성 파일이 있습니다.

  12.   티토

    좋아요, 친구, 질문을 할 수 있습니다. 옵션이있는 쉘 스크립트가 필요하며이를 기반으로하여 훌륭하게 작동하지만 옵션 중 하나는 이메일을 보내야하고 (포스 티 픽스 사용) 제목, 텍스트를 요청합니다. 화면의 수신자 및 수신자가 무엇을 보내고 올바르게 전송되었는지 확인합니다. mailq를 사용하면 대기열을 볼 수 있고 전송되었는지 확인할 수 있지만 제목, 텍스트 및 수신자를 수신 한 변수를 사용하여 명령으로 이메일을 보내려면 어떻게해야합니까? ? 🙁

    1.    KZKG ^ 가아라

      내 이메일(kzkggaara[at])에 편지를 보내주세요.desdelinux[dot]net) 좀 더 차분하게 말씀해주시면 제가 도와드리겠습니다 :)

      1.    티토

        감사합니다 친구, 당신은 통과했습니다!

  13.   하기까지

    안녕하세요.
    나는 메뉴가 필요할 때이 훌륭한 예를 보았습니다.
    나는 그것을했고 그것을 작동시킬 수 없다 (이전 단계에서).
    다른 영토 도메인을 나타내는 247 개의 요소가 있습니다.
    내가 필요한 것은 국가를 선택할 수있는 메뉴입니다.
    #! / bin / bash
    선명한
    동안:
    do
    echo»시도 할 국가 선택»
    에코«1. 아프가니스탄 (AF)»
    에코«2. 알바니아 (AL)»
    에코«3. 독일 (DE)»
    에코«5. 앙골라 (AO)»
    에코«6. 앵 귈라 (AI)»
    .. 247까지 계속

    echo -n "옵션 선택 [1-247]"
    읽기 옵션
    케이스 $ 옵션
    1) echo "이것은 당신입니다 :"; whoami ;;
    2) echo "당신은 이것을 가지고 있습니다"; df ;;
    3) 에코 ""; uname -r ;;
    4) echo "bye"; exit 1 ;;
    5) echo "이것은 당신입니다 :"; whoami ;;
    6) echo "이것은 당신입니다 :"; whoami ;;
    … 그리고 247까지 계속됩니다.
    *) echo«$ opc는 잘못된 옵션입니다. 너무 어려워? ";
    echo "계속하려면 키를 누르세요 ...";
    읽기 foo ;;
    그 C

    동작은 다음과 같습니다.
    출력 인 4를 제외한 모든 옵션은 입력 된 번호를 삭제하고 새 번호를 기다립니다.
    4 개들이 나옵니다.
    4의 코드를 다른 줄에 넣으면 (150이라고하자) 문제없이 똑같이 나옵니다.
    또한이 형식으로 코드를 입력하려고했습니다.
    151) echo "당신은 다음과 같습니다 :";
    우와 미 ;;
    같은 결과로.
    긴 메뉴에 더 좋은 옵션이 있는지 궁금하고 물론 잘못하고 있습니다.
    도움을 주시면 감사하겠습니다.

  14.   라울 만

    훌륭합니다 ... 껍데기에 들어가는 것이 아주 좋은 것 같아요

    감사

  15.   마르코스

    좋아, 내 bash를 파일로 어떻게 만들 수 있니?
    예 :

    Upload.sh fotodelavecina.jpg

    내 bash 스크립트 "upload.sh"에 내 ftp에 대한 액세스 정보가 있다고 생각합니다.

    인사와 감사 😀

  16.   Netzulo NTX

    좋은 사람, 모든 스크립트에 대해 대단히 감사합니다. 저는 CentOS 서버를 설정했으며 이러한 템플릿이 얼마나 잘 나왔는지 모르겠습니다. 이메일로 저에게 연락하십시오. 너에게 뭔가를 제안하고 싶어

  17.   가브리엘 발데 라모스

    메뉴를 만들 때 왜 read foo를 사용합니까? 내가 필요한 빠른 답변