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

강타 주문을 해석하는 기능을 가진 컴퓨터 프로그램입니다. 그것은 껍질을 기반으로합니다 유닉스 프로젝트를 위해 작성되었습니다. 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"

기사 끝. 정말 좋아요 

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


Google에서 선호하는 검색 엔진으로 추가