을 위한 간단한 bash 스크립트 작성다음과 같은 간단한 단계를 수행해야 합니다.

작동 원리:

스크립트의 첫 번째 줄은 스크립트가 성공적으로 실행되는 데 필수적입니다.

두 번째 줄은 testdir 디렉토리를 생성합니다.

세 번째 줄을 사용하면 생성된 디렉토리 testdir로 변경할 수 있습니다.

접촉다음 줄은 세 개의 파일을 만듭니다.

스크립트 줄의 마지막 명령을 사용하면 이전 줄 덕분에 세 개의 빈 파일이 나타난 현재 디렉터리의 내용을 표시할 수 있습니다.

우리가 볼 수 있듯이, 우리의 간단한 스크립트모든 명령은 새 줄에서 시작합니다. 스크립트가 실행될 때 각 행은 순차적으로 작업을 수행하여 특정 작업을 수행합니다.

매일 Linux에서 동일한 명령 체인(상수 매개변수 포함)을 실행하는 경우 동일한 명령을 작성하는 것이 합리적일 수 있습니다. 간단한 bash 스크립트, 시간을 절약하고 작업을 자동화할 수 있습니다.

일부 작업을 자동화해야 하는 경우가 종종 있습니다. Bash 스크립트는 항상 구출됩니다!
스크립트를 실행하려면 액세스 권한을 변경하고 파일 실행 기능을 추가해야 한다는 점을 잊지 마십시오.

1. 입출력, 리디렉션

#!/bin/bash # 모든 셸 스크립트는 항상 줄로 시작합니다. #!/bin/bash (또는 #!/bin/sh) # 주석은 항상 다음으로 시작합니다. # # 메시지를 표시하려면 ECHO 명령을 사용하십시오. echo "hello, world" # 이것은 형식화된 출력의 예입니다...

C printf "formatted output ten=%d string=%s float=%f hex_number=0x%X\n" 10 "string" 11.56 234 # 키보드에서 입력을 읽는 예제 read A echo $A printf " 입력된 단어: %s\n" "$A" #리디렉션, 파이프라인, 다른 프로그램의 출력 가져오기 #10자 암호 생성의 예 PASSWORD1=`cat /dev/urandom | tr -d -c 'a-zA-Z0-9' | 접기 -w 10 | head -1` echo Password=$PASSWORD1 #quotes " 형식의 출력 결과를 화면에 표시 출력은 "backquotes" 작업의 결과입니다. #이 경우 결과는 여러 프로그램의 파이프라인 출력입니다.

Linux 터미널 애호가를 위한 흥미로운 bash 스크립트

#작업 | 컨베이어를 의미합니다. 저것들. 우리의 예에서: #cat /dev/urandom 파일 /dev/urandom(의사 난수 생성을 위한 특수 파일)의 내용을 stdout으로 출력합니다. #tr은 번역을 수행합니다. 일부 바이트를 다른 바이트로 바꿉니다(비밀번호에 인쇄할 수 없는 문자가 나타나는 것을 피하기 위해 필요합니다). #fold는 std.in에서 받은 것을 10자 길이의 줄로 분할하고 stdout에 인쇄합니다. #head -1 첫 번째를 인쇄합니다. 표준 입력에서 그녀에게 온 것을 줄입니다. # 또는 이와 같이: PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | 헤드 -c10` 에코 비밀번호=$PASSWORD2

2. 산술 연산, 횟수에 따른 순환

#!/bin/bash A="10" B="5" C=`expr $A + $B` printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C" # 루프 I=0 while [ $I -lt 15 ] do printf "0x%02x " "$I" I=`expr $I + 1` done echo

3.수표의 종류

#!/bin/bash # 파일 존재 확인 예제 # 파일 생성 test1 touch test1 # 파일 존재 확인 test1 if [ -f test1 ] ; then echo "test1 파일이 존재합니다" fi # test2 파일이 존재하지 않는지 체크 if ! [ -f 테스트2 ] ; then echo "파일 test2가 존재하지 않습니다" fi # 다른 명령 옵션에 대한 간략한 참조 # -d 파일 이름 디렉토리가 존재합니다 # -f 파일 이름이 파일이 존재합니다 # -L 파일 이름이 심볼릭 링크가 존재합니다 # -r, -w, -x 파일이 읽기, 쓰기 가능 또는 do # -s 파일 이름 파일이 존재하고 길이가 0이 아님 # f1 -nt f2 f1이 f2보다 최신임 # f1 -ot f2 f1이 f2보다 오래됨

태그: bash, freebsd, 쉘

다음을 통해 의견을 작성하십시오.

간단한 bash 스크립트를 작성하는 방법

한 번에 여러 명령을 순차적으로 실행하거나 모두 실행하는 방법은 무엇입니까? 여러 명령을 실행해야 하는 경우 기호 " ; » 메타 문자라고 합니다. 구문은 다음과 같습니다. 명령1; 명령2; 명령3

"로 구분된 명령 ; » 순차적으로 수행됩니다. 쉘은 다음 명령을 기다리고 마지막 명령이 실행된 후 명령줄 프롬프트로 돌아갑니다.

여러 명령의 동시 실행

명령 끝에 앰퍼샌드 "&"를 넣어 한 번에 여러 명령을 실행합니다. 예를 들어, 백업 스크립트의 시작을 고려하십시오.

# /root/ftpbackup.sh &

터미널은 추가 사용이 가능하므로 /root/ftpbackup.sh 스크립트가 실행을 마칠 때까지 기다릴 필요가 없습니다!

모든 것을 함께 사용

수천 개의 *.bak 파일이 있을 수 있습니다. 하지만 원하는 카테고리를 나열하고 모든 것을 /tmp/list에 입력하기만 하면 됩니다.

# for d in "/home/sales /home/dbs /data1"; $d -iname "*.bak" >> /tmp/list를 찾으십시오. 완료 &

원천

BASH 학습(기초)

날짜:2012-12-10

스크립트 작성 배우기

대부분의 경우 모든 Linux는 스크립트로 구성되어 있으므로 이 언어만 알면 됩니다.
그 핵심은 다양한 구성의 도움과 함께 스마트하고 잘 고려된 코드로 결합된 일련의 Linux 명령일 뿐입니다.

첫 번째 스크립트를 만들어 보겠습니다.
이렇게 하려면 텍스트 편집기를 열고 파일을 다음으로 채우면 됩니다.

#!/bin/bash
누구; 데이트

여기에서는 모든 것이 간단합니다.
기본적으로 해시 표시(#)는 대부분의 경우 주석의 시작 부분으로 처리되지만 여기서는 첫 번째 줄부터 bash 인터프리터를 사용해야 함을 알려줍니다.

1) 실행권한을 부여할 필요가 있다.

chmod u+x bash1.sh

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game

그리고 이 파일을 디렉토리 중 하나로 옮깁니다. 물론 전체 위치가 아니라 이름으로만 참조해야 하는 경우는 예외입니다.

여기서 우리는 스크립트가 어떻게 생성되는지 살펴보았고 이해해야 할 몇 가지 사항이 있습니다.

스크립트를 작성할 때마다 변수를 처리하고, 입력 및 출력을 리디렉션하고, 파이프로 작업하고, 수학적 계산을 수행합니다.

변수

새 변수를 정의하려면 다음과 같이 말하십시오.

#!/bin/bash
F=이반
나=이바노프
O=이바니히
#표시:
echo "FIO $F $I $O"

결과

sh bash2.sh
FIO 이반 이바노프 이바니치

변수 보기
# 세트

BASH=/bin/bash
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
홈=/루트
SSH_CLIENT='192.168.200.3 9382 22'
SSH_CONNECTION='192.168.200.3 9382 192.168.200.252 22'

` `로 변수를 설정하는 또 다른 매우 흥미롭고 유용한 방법이 있습니다.

#!/bin/bash
일=`날짜 +%y%m%d`
# 앞으로는 $day 변수를 스크립트에 삽입할 수 있습니다(예: 백업

rsync -avz /root/data /root/backup.$day

이러한 스크립트를 실행하면 백업이 생성된 날짜의 정의와 함께 백업이 나타납니다.

입력 및 출력 리디렉션.

> 파일 내용을 완전히 덮어쓰면서 파일로 리디렉션
>> 기존 콘텐츠의 끝에 파일에 추가하도록 리디렉션합니다.
ls -al / > 123
그리고 명령:
ls -al /홈 >> 123
루트의 모든 파일을 나열한 다음 그 뒤에 홈 디렉토리의 내용을 추가하십시오.
이 리디렉션을 출력 리디렉션이라고 합니다.
입력 리디렉션 - 콘텐츠가 명령으로 리디렉션됩니다.
종류< sort.txt
sort 명령은 알파벳순으로 정렬하므로 무작위로 채워진 sort.txt 파일이 정렬 프로그램으로 리디렉션된 후 알파벳순으로 정렬됩니다.
종류< sort.txt | more — а построение в канал отобразит отсортированные данные постранично
종류< sort.txt | grep s | more — отсортирует и выведет все со знаком «S»

또 다른 유용한 정보는 한 명령의 결과를 다른 명령 또는 여러 명령에 전달하는 것입니다.
이에 대한 예는 다음과 같습니다.

고양이 /var/log/maillog | 그렙 차단 | 더

1) cat - 전체 로그 파일을 표시합니다.
2) 그런 다음 이 로그 파일은 처리를 위해 grep 명령으로 전달되며 이는 차단됨으로만 표시되지만 이 상태의 메시지가 많기 때문에 more 명령으로 전달해야 합니다.
3) more - 페이징 데이터에 필요

이러한 일련의 명령을 채널에서 전송이라고 하며, 한 명령의 데이터가 처리를 위해 전송되고 다른 명령의 데이터가 원하는 형식을 취할 때까지 이런 식으로 계속됩니다.

수학 계산

Linux에서 수학을 수행하는 가장 쉬운 방법은 bc 명령을 사용하는 것입니다.
이 경우 scale을 이용하여 부동소수점 뒤에 소수점 이하 자릿수를 설정하면 안 된다.

#!/bin/bash
변수1=45
변수2=22
var3=`에코 "스케일=3; $var1/$var2" | BC`
에코 $var3

Plutonit.ru - 관리, Linux 및 Windows 설정 2009 - 2018

데이터베이스 오류: 'a111530_forumnew.rlf1_users' 테이블이 존재하지 않습니다.

홈 -> MyLDP -> Linux 전자책

스크립트 생성 및 실행

스크립트를 작성하고 이름을 선택하십시오.

쉘 스크립트는 여러 번 사용할 수 있는 일련의 명령입니다. 이 시퀀스는 일반적으로 명령줄에 스크립트 이름을 입력하여 실행됩니다. 또한 cron을 사용하면 스크립트를 사용하여 작업을 자동화할 수 있습니다. 스크립트의 또 다른 용도는 UNIX 시스템을 부팅하고 종료하는 것입니다. 여기서 init 스크립트는 데몬과 서비스에 대한 작업을 정의합니다.

셸 스크립트를 만들려면 편집기에서 비어 있는 새 파일을 엽니다. 이를 위해 모든 텍스트 편집기를 사용할 수 있습니다. 정력, 이맥스, gedit, dtpad등.; 무엇이든 할 것입니다. 그러나 다음과 같은 고급 편집기를 선택할 수 있습니다. 정력또는 이맥스, 이러한 편집기는 셸 및 Bash 구문을 인식하도록 구성할 수 있으며 괄호와 세미콜론을 닫는 것을 잊어버리는 등 초보자가 자주 범하는 실수를 방지하는 데 큰 도움이 될 수 있습니다.

명령줄에 입력하는 것처럼 새 빈 파일에 UNIX 명령을 입력합니다. 이전 장("명령 실행" 섹션 참조)에서 설명한 것처럼 명령은 쉘 기능, 내장 명령, UNIX 명령 또는 기타 스크립트가 될 수 있습니다.

스크립트가 하는 일을 알려주는 스크립트의 니모닉 이름을 선택하십시오. 스크립트 이름이 기존 명령과 충돌하지 않는지 확인하십시오. 혼동을 피하기 위해 스크립트 이름은 종종 .sh 확장자로 끝납니다. 그러나 선택한 동일한 이름을 가진 다른 스크립트가 시스템에 있을 수 있습니다. 명령 어느, 어디에및 기타, 이 이름의 이미 존재하는 프로그램 및 파일에 대한 정보를 찾으십시오.

which -a script_name 여기서 script_name은 script_name을 찾습니다( 약.트랜스.

Linux에서 스크립트 작성(예제 학습)

: 스크립트 이름으로 대체).

스크립트 script1.sh

이 예에서는 다음 명령을 사용합니다. 에코, 출력이 생성되기 전에 수행해야 할 작업을 사용자에게 알려주는 Bash에 내장되어 있습니다. 사용자가 스크립트가 수행하는 작업에 대해 알려주는 것이 좋습니다. 대본이 아무 것도 하지 않는 것처럼 보일 때에도 긴장하지 않았습니다.. 8장 "대화형 스크립트 작성"에서 사용자에게 경고하는 주제로 돌아갑니다.

그림 2.1. 스크립트 script1.sh

자신을 위해 같은 스크립트를 작성하십시오. 스크립트가 위치할 디렉토리를 만드는 것이 좋습니다. 이 디렉토리를 변수의 내용에 추가하십시오.

내보내기 PATH="$PATH:~/스크립트"

Bash를 처음 사용하는 경우 다른 쉘 구성에 대해 다른 색상을 사용하는 텍스트 편집기를 사용하십시오. 구문 강조 표시는 다음에서 지원됩니다. 정력, 지빔, (x) 이맥스, 쓰다및 기타 많은 편집기에 대해서는 좋아하는 편집기에 대한 설명서를 참조하십시오.

스크립트 실행

스크립트를 실행하려면 해당 사용자에 대한 실행 권한이 있어야 합니다. 권한을 설정한 후 필요한 권한을 실제로 설정했는지 확인하십시오. 이 작업이 완료되면 다른 명령과 마찬가지로 스크립트를 실행할 수 있습니다.

willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r— 1 willy willy 456 Dec 24 17:11 script1.sh willy:~> script1.sh The 스크립트가 지금 시작됩니다. 이봐 윌리! 이제 연결된 사용자 목록을 가져오겠습니다. 18일 오후 3시 38분, 5시 37분, 사용자 4명, 평균 로드: 0.12, 0.22, 0.15 USER TTY FROM [이메일 보호됨] IDLE JCPU PCPU WHAT 루트 tty2 - 토요일 오후 2시 4:25분 0.24초 0.05초 -bash willy:0 - 토요일 오후 2시 ? 0.00초? — willy pts/3 — 토요일 2pm 3:33m 36.39s 36.39s BitchX willy ir willy pts/2 — 토요일 오후 2시 3:33m 0.13s 0.06s /usr/bin/screen 지금 두 개의 변수를 설정하고 있습니다. 이것은 문자열입니다: 검정색 그리고 이것은 숫자입니다: 9 지금 귀하의 프롬프트를 돌려드리겠습니다. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

이것은 스크립트를 실행하는 가장 일반적인 방법입니다. 서브쉘에서 이와 같은 스크립트를 실행하는 것이 바람직합니다. 이 서브쉘에서 생성된 변수, 함수 및 별칭은 해당 서브쉘의 특정 bash 세션에만 알려져 있습니다. 이 셸이 종료되고 부모 셸이 제어를 넘겨 받으면 모든 설정이 지워지고 셸 상태에서 스크립트로 수행한 모든 변경 사항은 잊혀집니다.

변수에 디렉토리 또는 (현재 디렉토리)를 지정하지 않은 경우 다음과 같이 스크립트를 활성화할 수 있습니다.

./스크립트 이름.sh

기존 셸 내에서 스크립트를 실행할 수도 있지만 일반적으로 스크립트가 다른 셸에서 작동하는지 확인하거나 디버깅 목적으로 트레이스백을 실행하려는 경우와 같이 접근성을 원할 경우에만 수행됩니다( 약.트랜스.- 대신 스크립트 이름 지정):

rbash script_name.sh sh script_name.sh bash -x script_name.sh

지정된 쉘은 현재 쉘의 서브쉘로 실행되고 스크립트를 실행합니다. 특정 매개변수를 사용하거나 스크립트 자체에 지정되지 않은 특정 조건에서 스크립트를 실행하려는 경우 이 작업이 수행됩니다.

새 셸을 시작하고 싶지 않지만 현재 셸에서 스크립트를 실행하려면 다음 명령을 사용하십시오.

소스 script_name.sh

이 경우 스크립트는 실행 권한이 필요하지 않습니다. 명령은 현재 셸의 컨텍스트에서 실행되므로 스크립트 실행이 완료되면 환경에 대한 변경 사항이 계속 표시됩니다.

willy:~/scripts> 소스 script1.sh --출력 생략- willy:~/scripts> echo $VALUE 9 willy:~/scripts>

명령줄과 그것으로 할 수 있는 상상할 수 없는 일들은 UNIX와 모든 상속자들의 특징입니다. 그리고 명령줄이 있는 곳에 스크립트가 있습니다. 그리고 오늘... 아니요, 우리는 스크립트를 작성하는 방법을 배우지 않을 것입니다. 가장 유용한 스크립트, 즉 일기 예보 및 웹 서버에서 다양한 작업을 해결하기 위해 매일 사용할 수 있는 스크립트를 고려할 것입니다. 10줄의 트위터용 봇과 모든 토렌트 클라이언트를 자동으로 실행하는 스크립트.

나는 샤머니즘을 전혀 지지하지 않는다는 것을 즉시 유보할 것이며, 어떠한 경우에도 당신이 녹색-검정 콘솔에 앉아서 그것이 의미하는 행동을 수행하기 위해 많은 글자를 입력하도록 촉구하지 않습니다. 그래픽 인터페이스에서 원하는 요소 위로 마우스를 가져가기에 충분합니다. 그러나 콘솔과 스크립트는 그래픽 인터페이스보다 많은 문제를 해결하는 데 훨씬 더 적합하므로 무시할 수 없다고 확신합니다. 또한 모든 DE를 사용하면 스크립트에 대한 아이콘을 생성할 수 있으므로 스크립트를 실행하기 위해 콘솔을 열 필요도 없습니다.

간단한 예

따라서 더 이상 고민하지 않고 바로 예제로 넘어가 보겠습니다.

$ 컬 ifconfig.com

이 간단한 명령은 외부 IP를 표시합니다. 라우터를 통해 네트워크에 연결하는 경우에 이상적입니다. 전체 웹 페이지 대신 한 줄에 IP 주소를 반환하는 ifconfig.co 서버를 호출하기만 하면 됩니다.

그리고 예, 이것은 스크립트가 아닙니다. 그냥 명령일 뿐이지만 명령을 스크립트로 바꾸려면 텍스트 파일에 넣고 소위 shebang을 첫 번째 줄, 즉 문자 # ! 다음에 명령 인터프리터의 이름이 옵니다.

$ chmod +x ~/bin/myip.sh

이제 myip.sh 명령을 사용하여 명령줄에서 호출할 수 있습니다.

#!/bin/sh curl -4 wttr.in/Moscow

이 스크립트를 사용하면 4일 동안의 일기 예보를 얻을 수 있습니다. 여기서 원칙은 ifconfig.co의 경우와 동일합니다.

콘솔 날씨 요약 #!/bin/sh dig +short txt $1.wp.dg.cx

이렇게 하면 웹 서버에 연결하는 대신 DNS 쿼리를 사용하여 Wikipedia에서 간단한 설명을 얻을 수 있습니다. 그건 그렇고, 명령줄을 통해 웹 서버를 만드는 것도 매우 쉽습니다:

#!/bin/sh 동안 (nc -l 80< file.html >:) ; 하다: ; 완료

이 스크립트는 netcat(nc) 유틸리티를 기반으로 하며, 네트워크 작업을 위한 스위스 군용 칼이라고 합니다. 스크립트는 포트 80에서 수신 대기하고 요청에 대한 응답으로 다음을 반환하는 nc 명령을 실행하는 루프를 시작합니다. 파일.html, 전달된 요청을 아무데도 전송하지 않습니다(기호는 noop, 즉 빈 작업을 의미함).

간단한 스크립트와 명령을 사용하여 인터넷 라디오를 쉽게 들을 수 있습니다.

#!/bin/sh mpv --volume=50 -재생 목록 ~/16bit.fm_128.m3u

당연히 M3U 형식의 재생 목록은 라디오 방송국 웹 사이트에서 미리 다운로드해야 합니다. 그건 그렇고, 인수로 MPlayer를 시작하면 --input-ipc-server=/tmp/mpvsocket, 파일에 명령을 작성하여 제어할 수 있습니다. 예를 들어 다음과 같이 볼륨을 조정합니다.

에코 "볼륨 +10" | socat - /tmp/mpvsocket

두 개의 스크립트를 작성하십시오. 하나는 시작하고 다른 하나는 라디오를 중지하고(killall mpv 줄을 사용하여) 데스크탑에 걸고 DE 핫키를 설정하여 재생을 제어합니다. 짜잔, 인터넷 라디오용 플레이어가 준비되어 있습니다. 이 플레이어는 바탕 화면의 아이콘을 클릭하기만 하면 실행할 수 있습니다. 그리고 그것은 거의 메모리를 낭비하거나 트레이를 차지하지 않습니다.

그러나 네트워크 운영에서 벗어나 지역 문제로 돌아가자.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

이것은 내가 가장 좋아하는 스크립트 중 하나입니다. 현재 디렉토리의 tar.gz 아카이브를 생성합니다. $(PWD##*/) 구조는 현재 디렉토리($PWD 변수)에 대한 전체 경로를 취하고 첫 번째 부분을 마지막 슬래시까지 제거하여 디렉토리 이름만 남기는 여기서 특별한 주의를 기울일 필요가 있습니다. 그 자체. 또한 tar.gz 확장자가 추가됩니다. man bash에서 이러한 구성에 대해 자세히 읽을 수 있습니다.

#!/bin/sh가 참일 때; inotifywait -r -e MODIFY DIRECTORY && YOUR_COMMAND 완료

그리고 이것은 디렉토리의 파일 변경에 대한 응답으로 명령을 실행하는 스크립트입니다. MP3 파일을 저장할 때 자동으로 플레이어를 켜는 등 다양한 용도로 사용할 수 있습니다. 또는 notify-send를 명령으로 사용하여 바탕 화면에 알림을 표시합니다.

Notify-send "파일 변경됨"

데스크탑

데스크탑에 대해 이야기하고 있으므로 계속하겠습니다. 콘솔과 마찬가지로 스크립팅할 수도 있습니다. 예를 들어, 다음은 월페이퍼 reddit 채널에 게시된 임의의 월페이퍼를 로드하는 스크립트입니다.

계속 회원만 이용 가능

옵션 1. "사이트" 커뮤니티에 가입하여 사이트의 모든 자료를 읽으십시오.

지정된 기간 동안 커뮤니티에 가입하면 모든 Hacker 자료에 액세스할 수 있고 개인 누적 할인이 증가하며 전문적인 Xakep 점수 등급을 누적할 수 있습니다!

Linux 콘솔은 Windows의 명령줄에서 허용하지 않는 조작을 수행할 수 있는 도구이며 Linux 콘솔은 UNIX의 특징입니다. 오늘 자료는 스크립트를 작성하는 방법에 관한 것이 아닙니다. 아니요, 어떻게, 무엇을, 왜 가르쳐주지 않을 것입니다. 다양한 종류의 작업을 해결하기 위해 매일 사용할 수 있는 몇 가지 유용한 스크립트를 살펴보겠습니다. 예를 들어 며칠 전의 날씨 보기, 웹 서버용 스크립트 한 줄로 보기, 봇 작성하기 Twitter 및 모든 토렌트 클라이언트를 자동으로 시작하는 스크립트.

이 자료는 샤머니즘에 참여하기 위해 작성된 것이 아닙니다. 어떤 경우에도 콘솔에 앉아서 수백 개의 문자를 입력하여 원하는 요소 위에 마우스를 올려 놓는 것만으로 그래픽 인터페이스에서 수행할 수 있는 몇 가지 작업을 수행하도록 촉구하지 않습니다. 필요. 그러나 한 가지가 있지만 항상 그래픽 인터페이스가 최상의 솔루션은 아닙니다. 종종 많은 문제를 해결하기 위해 콘솔과 스크립트가 그래픽 인터페이스가 있는 응용 프로그램보다 작업에 훨씬 더 잘 대처하므로 스크립트를 잊어서는 안 됩니다. 많은 일상적인 작업을 그래픽 작업보다 더 잘 해결합니다. 또한 모든 DE에서 콘솔을 열지 않고도 쉽게 실행할 수 있는 스크립트 아이콘을 생성할 수 있다는 점을 추가할 가치가 있습니다.

간단한 예부터 시작하겠습니다.

아래 명령은 외부 IP를 표시합니다. 라우터를 사용하여 네트워크에 액세스하는 경우에 이상적입니다. 이 명령은 필요하지 않은 추가 낙서 없이 IP를 한 줄로 반환하는 ifconfig.co 서버를 호출합니다.

컬 ifconfig.com

예, 이것은 스크립트가 아닙니다. 이것은 작은 명령이지만 이 명령을 스크립트로 변환하려면 텍스트 파일에 넣으면 됩니다. 결과적으로 작은 bash 스크립트가 생성됩니다.

#!/bin/bash 컬 ifconfig.co

스크립트를 ~/bin 디렉토리에 저장하고 실행 권한을 부여합니다.

Chmod +x ~/bin/yourip.sh

거의 완료되었습니다. yourip.sh 명령을 사용하여 명령줄에서 스크립트를 실행할 수 있습니다.

C ip 완료, 콘솔에서 날씨를 봅시다.

#!/bin/sh 컬 -4 wttr.in/Kiev

이 스크립트를 사용하면 4일 동안의 날씨 보고서를 받을 수 있습니다. 이 경우에는 키예프 시의 날씨입니다.

#!/bin/sh dig +short txt $1.wp.dg.cx

위에서 Wikipedia에서 간단한 설명을 얻는 방법의 예를 볼 수 있습니다. 이 경우 웹 서버 대신 DNS 쿼리를 사용합니다. 콘솔을 통한 웹 서버도 매우 쉽게 생성할 수 있습니다.

#!/bin/sh 동안 (nc -l 80< file.html >:) ; 하다: ; 완료

위의 스크립트는 netcat(nc) 유틸리티를 기반으로 하며, 종종 스위스 군용 칼이라고도 합니다. 네트워크 작업을 위한 많은 트릭을 수행할 수 있기 때문입니다. 스크립트는 간단합니다. nc 명령을 실행하는 루프를 시작하고 이미 80번째 포트를 수신하고 있으며 요청에 대한 응답으로 다음을 제공합니다. 파일.html, 전달된 요청을 아무데도 전송하지 않습니다(기호는 noop, 즉 빈 작업을 의미함).

간단한 스크립트와 명령을 사용하여 인터넷 라디오를 들을 수 있습니다.

#!/bin/sh mpv --volume=50 -재생 목록 ~/16bit.fm_128.m3u

물론 그 전에 라디오 방송국 웹 사이트에서 M3U 형식의 라디오 재생 목록을 다운로드해야 합니다. 인수를 사용하여 MPlayer를 시작하는 경우 -input-ipc-server=/tmp/mpvsocket, 파일에 명령을 작성하여 제어할 수 있습니다. 예를 들어 다음과 같이 볼륨을 조정합니다.

에코 "볼륨 +10" | socat - /tmp/mpvsocket

우리는 두 개의 스크립트를 생성합니다. 첫 번째 스크립트는 시작하고 다른 하나는 라디오를 중지한 다음(여기서 killall mpv 줄을 작성할 것입니다), 바탕 화면에 걸어두고 DE 핫키를 설정하여 재생을 제어합니다. 이제 인터넷 라디오를 들을 수 있는 플레이어가 생겼습니다.

우리는 네트워크 작업에 몰두했습니다. 로컬 작업으로 이동하겠습니다.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

이 스크립트는 현재 디렉토리에 대한 tar.gz 아카이브를 생성합니다. $(PWD##*/) 구문에 특히 주의해야 합니다. 이 구문은 현재 디렉토리($PWD 변수)의 전체 경로를 취한 다음 첫 번째 부분을 마지막 슬래시까지 제거하고 디렉토리 이름만 남기고 추가합니다. tar.gz 확장자입니다. 그러한 구조에 대한 더 많은 정보를 알고 싶다면 콘솔에 man bash를 입력하여 읽을 수 있습니다.

#!/bin/sh가 참일 때; inotifywait -r -e MODIFY DIRECTORY && YOUR_COMMAND 완료

위의 스크립트는 디렉토리의 파일 변경에 대한 응답으로 명령을 실행합니다. MP3를 저장할 때 자동으로 플레이어를 켜는 등 다양한 용도로 사용할 수 있습니다. 또는 예를 들어, notify-send 명령을 사용하여 바탕 화면에 알림을 표시합니다.

Notify-send "파일 변경됨"

데스크탑

아래에서 월페이퍼 reddit 채널에 게시된 임의 월페이퍼를 로드하는 스크립트의 예를 볼 수 있습니다.

#!/bin/bash wget -O - http://www.reddit.com/r/wallpaper |\ grep -Eo "http://i.imgur.com[^&]+jpg" |\ shuf -n 1 |\ xargs wget -O background.jpg feh --bg-fill background.jpg

모든 것이 아주 간단하게 작동합니다. wget 유틸리티를 사용하여 스크립트는 www.reddit.com/r/wallpaper 페이지를 다운로드한 다음 이미 imgur에 대한 링크를 찾고 있는 grep에 전달하고 shuf로 임의의 것을 선택하고 wget으로 다운로드하고 설정합니다. feh 명령을 사용하여 바탕 화면의 배경 화면으로 사용합니다(먼저 설치해야 하는 미니어처 이미지 뷰어). 위에서 설명한 대로 이 스크립트를 일반 텍스트 파일에 추가하고, sh 형식으로 저장하고, 실행 가능하게 만들고, 아이콘을 추가하고, 클릭 시 바탕 화면에서 실행하면 배경 화면이 변경됩니다.

#!/bin/sh state=`synclient | grep 터치패드 끄기 | cut -d "=" -f 2` if [ $state = "1" ]; then synclient TouchpadOff=0 else synclient TouchpadOff=1 fi

위의 스크립트는 노트북의 터치패드를 활성화 및 비활성화하는 데 사용됩니다. 비활성화된 경우 활성화하고 그 반대의 경우도 마찬가지입니다. 올바른 작동을 위해 Synaptics에서 주로 생산하는 터치패드를 제어할 수 있는 synclient 유틸리티를 사용합니다. 이는 90%, 어쩌면 그 이상일 수도 있습니다. 유틸리티를 시작한 후 많은 정보가 표시되며 활성화된 경우 TouchpadOff = 1, 비활성화된 경우 TouchpadOff = 2가 표시됩니다. 스크립트는 이러한 값을 읽고 터치패드의 상태에 따라 활성화 또는 비활성화합니다.

!#/bin/bash mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg photo.jpg rm -f 0000*.jpg

위의 스크립트를 사용하여 웹캠을 사용하여 사진을 찍을 수 있습니다. 스크립트는 mpv 비디오 플레이어를 사용하여 카메라로 찍은 처음 세 프레임을 0000000.jpg, 00000002.jpg, 00000003.jpg 등의 이름으로 JPEG 파일에 기록합니다. 그 후 세 번째 사진의 이름은 photo.jpg로 바뀝니다. 파일, 나머지는 삭제됩니다. 쓰리샷은 뭐에 쓰나요? 카메라를 초기화할 시간을 주기 위해서만 필요합니다. 처음 두 샷을 사용하면 일반적으로 검은색 사진이 나옵니다. 포지셔닝과 관련된 사건도 있으며 사진이 거꾸로 될 수 있습니다. 이것을 피하려면 mpv를 -vf flip 플래그와 함께 실행해야 합니다.

Mpv tv:// -frames 3 -vf 뒤집기 -vo jpeg

동일한 명령을 사용하여 사용자가 마우스를 터치할 때만 사진을 찍는 보안 카메라를 만들 수 있습니다.

#!/bin/bash는 true일 때; do sudo 고양이 /dev/input/mouse0 | read -n1 mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg `date +%F-%H-%M`.jpg rm -f 0000*.jpg sleep 10 완료

위의 스크립트는 무한 루프를 사용하여 /dev/input/mouse0에서 데이터를 가져옵니다. 데이터가 있는 경우 마우스가 이동되었거나 버튼 중 하나가 눌려진 것입니다. 그 후 mpv를 사용하여 세 개의 스냅샷을 만들고 세 번째 스냅샷에 현재 날짜의 이름을 지정하고 처음 두 개를 삭제합니다.

웹캠에서 전체 비디오를 녹화하려면 다음과 같은 스크립트를 예로 사용할 수 있습니다.

#!/bin/bash mencoder tv:// -tv driver=v4l2:width=800:height=600:device=/dev/video0:fps=30:outfmt=yuy2:forceaudio:alsa:adevice=hw.2, 0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -ffourcc xvid -oac mp3lame -lameopts cbr=128 -o video.avi

결과적으로 MPEG4 형식, 1800비트 전송률 및 128비트 전송률의 MP3 오디오 파일의 video.avi라는 파일을 얻게 됩니다.

#!/bin/bash ffmpeg -f x11grab -r 25 -s 1366x768 -i:0.0 screencast.mpg

위의 스크립트를 사용하여 전체 스크린캐스트를 녹화할 수 있습니다. 1366×768은 바탕 화면 해상도이며 사용자 정의할 수 있습니다. 개별 창의 스크린샷을 찍으려면 가져오기 명령을 사용할 수 있습니다.

스크린샷 가져오기.png

위의 명령을 실행하면 타사 응용 프로그램이나 확장 프로그램을 사용하여 스크린샷을 찍을 때와 같이 마우스 커서 아이콘이 십자 모양으로 바뀌고 이를 사용하여 화면 영역을 선택할 수 있습니다. 이 명령을 단축키 중 하나에 걸면 스크린샷을 만들기 위한 거의 완벽한 시스템을 얻을 수 있으며 이 조합은 RAM을 차지하지 않으므로 큰 이점이 됩니다.

콘솔을 사용하여 외부 모니터를 설정할 수도 있습니다.

#!/bin/sh if [ -z "$1" ]; 그런 다음 fi를 종료합니다. if [ $1 == "off" ]; then xrandr --output VGA-0 --off xrandr -s 0 else if [ $1 == "on"]; 다음 xrandr --output LVDS --auto --primary --output VGA-0 --auto --left-of LVDS xrandr --newmode "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync + --sync 추가 모드 VGA-0 1920x1080 xrandr --출력 VGA-0 --mode 1920x1080 fi xrandr --dpi 96

이 스크립트는 이름이 LVDS인 기본 모니터와 이름이 VGA-0인 외부 모니터에 의존합니다. 이것은 모든 랩톱의 표준 상황입니다. 확실하지 않은 경우 스크립트에 인수를 전달할 때 xrandr: 명령을 실행하여 확인할 수 있습니다. 끄다외부 모니터를 비활성화합니다. 인수 ~에, 차례로 포함하여 주(인수 -LVDS의 왼쪽첫 번째 팀에서). 스크립트가 1920 x 1080 해상도의 모니터에 대한 새 구성을 생성하고 활성화한 후. 그리고 결국 스크립트는 기본 DPI 값을 설정합니다. 다른 해상도로 모니터를 연결할 때 종종 충돌하기 때문입니다.

대부분의 경우 명령 xrandr-newmode...그리고 xrandr - 추가 모드 ... Xorg는 EDID를 사용하여 모니터 구성 및 해상도를 가져오기 때문에 필요하지 않습니다. 그러나 때로는 이것이 발생하지 않고 인수 뒤에 구성 문자열이 지정됩니다. -새 모드, cvt 도구를 사용하여 직접 생성해야 합니다.

CVT 1920 1080

cvt 도구를 사용하여 기본 모니터에서 지원하지 않는 사용자 정의 해상도를 생성할 수 있습니다.

명령줄에서 Google 검색

네트워크 서비스로 돌아가자. Google에서 처음 10개의 검색 결과를 얻는 방법은 무엇입니까? 아래 스크립트를 참조하세요.

#!/bin/bash Q=" " URL="https://www.google.de/search?tbs=li:1&q=" AGENT="Mozilla/4.0" stream=$(curl -A "$AGENT" -skLm 10 "$(GOOG_URL)$(Q//\ /+)" | grep -oP "\/url\?q=.+?&" | sed "s|/url?q=||; s| &||") echo -e "$(스트림//\%/\x)"

이 스크립트는 curl을 사용하여 Google에 요청을 보내고 검색 문자열의 공백을 플러스로 바꿉니다. 그 후 응답 HTML에 링크가 나타납니다.

YouTube 서비스 예:

#!/bin/bash mpv -fs -quiet `youtube-dl -g "$1"`

위 예제의 스크립트는 mpv 플레이어를 사용하여 인수에 지정된 ID로 비디오를 재생합니다. 먼저 youtube-dl을 설치해야 합니다.

Twitter 작업의 몇 가지 예. 아래에서 명령을 입력으로 받아들이고 명령 인터프리터를 사용하여 실행하고 지정된 사용자에게 결과를 보내는 본격적인 봇 스크립트를 볼 수 있습니다.

#!/bin/bash USER="닉네임" 동안 true; do CMD=`echo "/dma +1" | ttytter 스크립트 | sed "s/\[.*\]\ //" if [ $CMD != $OLD_CMD ]; then REPL=`$CMD` echo "/dm $USER $(REPL:0:140)" | ttytter -script CMD = $OLD_COMD fi sleep 60 완료

스크립트는 ttytter 콘솔 클라이언트를 사용하여 루프에서 직접 메시지의 마지막 값을 읽은 후 이 명령이 실행되었는지 확인하고 실행되지 않은 경우 이를 실행하고 USER 변수를 사용하여 지정된 사용자에게 보냅니다. 최대 140자.

모든 것이 작동하려면 ttytter 유틸리티를 설치하고 실행한 다음 콘솔에서 생성된 링크를 복사하여 브라우저의 주소 표시줄에 붙여넣고 확인을 거쳐 동의한 다음 인증 키를 받고 복사하여 붙여넣어야 합니다. ttytter의 콘솔에 넣습니다. 물론 이 모든 작업 전에 별도의 사용자를 추가하고 해당 계정으로 로그인하는 것이 바람직합니다.

Twitter를 사용하여 봇을 생성할 뿐만 아니라 시스템을 모니터링할 수도 있습니다. 아래 스크립트는 시스템 상태(호스트 이름, 가동 시간, 로드, 여유 메모리 및 CPU 로드)에 대한 정보가 포함된 메시지를 피드에 보냅니다.

#!/bin/bash HOST=`호스트 이름 -s` UP=`가동 시간 | 컷 -d" " -f4,5 | cut -d"," -f1` LOAD=`가동 시간 | 컷 -d":" -f5,6` MEM=`ps aux | awk "( sum += $4 ); END ( 합계 인쇄 )"` CPU=`ps aux | awk "( sum += $3 ); END ( 합계 인쇄 )"` tweet="호스트: $(HOST), 가동 시간: $(UP), CPU: $(CPU)%, 메모리: $(MEM)%, loadavg $(LOAD)" if [ $(echo "$(tweet)" | wc -c) -gt 140 ]; then echo "치명적인: 트윗이 140자보다 깁니다!" 1번 출구 fi echo $tweet | ttytter 스크립트

마지막으로 아래 스크립트를 살펴보겠습니다. 이 스크립트는 PC가 유휴 상태일 때 토렌트 클라이언트를 시작 및 중지하는 데 사용됩니다.

#!/bin/bash IDLE=600000 STOPCMD="transmission-remote -S" STARTCMD="transmission-remote -s" STOPPED="예" 동안 true; do if [ `xprintidle` -gt $IDLE ]; 그렇다면 [ $STOPPED = "예" ]; then $STARTCMD STOPPED="no" fi else if [ $STOPPED = "no" ]; 그런 다음 $STOPCMD STOPPED="예" fi fi 수면 60 완료

매분 스크립트는 무한 루프에 들어가 사용자가 마지막 작업을 수행한 후 경과된 시간(밀리초)을 확인합니다(이 목적으로 xprintidle이 사용됨). 600,000ms(10분)가 지나면 스크립트는 STARTCMD 변수에 지정된 명령을 실행합니다. 그렇지 않으면 STOPCMD 명령이 실행되지만 그 전에 STARTCMD가 실행된 경우에만 실행됩니다. 간단히 설명하면 STARTCMD가 시작된 후 10분 동안 컴퓨터에서 아무 것도 하지 않습니다. 우리의 경우 전송에서 모든 다운로드를 시작하는 명령이고 그렇지 않으면 모든 다운로드가 일시 중단됩니다. 전송 클라이언트가 마음에 들지 않습니까? Deluge에 대한 명령을 사용합니다(아래 참조).

STOPCMD="폭풍 콘솔 일시 중지 \*" STARTCMD="폭풍 콘솔 재개 \*"

결론

을 위한 간단한 bash 스크립트 작성다음과 같은 간단한 단계를 수행해야 합니다.

작동 원리:

스크립트 #!/bin/bash의 첫 번째 줄은 스크립트가 성공적으로 실행되는 데 필수적입니다.

두 번째 줄 mkdir testdir은 testdir 디렉토리를 생성합니다.

세 번째 줄 cd testdir을 사용하면 생성된 디렉토리 testdir로 변경할 수 있습니다.

접촉다음 줄에서 file1 file2 file3을 터치하면 세 개의 파일이 생성됩니다.

스크립트 ls -al 줄의 마지막 명령을 사용하면 이전 줄 덕분에 세 개의 빈 파일이 나타난 현재 디렉터리의 내용을 표시할 수 있습니다.

우리가 볼 수 있듯이, 우리의 간단한 스크립트모든 명령은 새 줄에서 시작합니다. 스크립트가 실행될 때 각 행은 순차적으로 작업을 수행하여 특정 작업을 수행합니다.

매일 Linux에서 동일한 명령 체인(상수 매개변수 포함)을 실행하는 경우 동일한 명령을 작성하는 것이 합리적일 수 있습니다. 간단한 bash 스크립트, 시간을 절약하고 작업을 자동화할 수 있습니다.

Linux에서 스크립트 작성(예제 학습)

———————————————————————————-

1. 소개

스크립트 작성에 필요한 것
명령줄 도구 및 필요한 옵션에 대한 지식.
초등학교 수준의 기본 영어 지식은 방해가 되지 않습니다.

스크립트가 필요한 이유
첫째, 리눅스 서버의 관리는 어느 정도 동일한 명령의 체계적인 실행으로 귀결됩니다. 또한 이러한 명령을 사람이 수행할 필요는 없습니다. 기계에서 실행되도록 프로그래밍할 수 있습니다.
둘째, (갑자기) 20-1000 ... 반복적인 작업을 수행하는 것만으로도 스크립트에서 구현하기가 훨씬 쉽습니다.

스크립트란?
스크립트는 컴퓨터가 특정 순서와 특정 시간에 실행해야 하는 일련의 명령입니다. 명령은 내부 쉘 명령(루프, 조건, 텍스트 정보 처리, 환경 변수 작업 등)이거나 필요한 매개변수를 사용하여 콘솔에서 실행하는 프로그램일 수 있습니다.

스크립트를 작성하는 방법
우리의 경우 스크립트는 실행 속성이 있는 텍스트 파일입니다. 스크립트 파일이 #!로 시작하는 경우 UNIX 세계에서는 sha-bang이라고 하며 이는 스크립트를 실행하는 데 사용할 인터프리터를 시스템에 알려줍니다. 이것이 이해하기 어렵다면 모든 스크립트를 #!/bin/bash 또는 #!/bin/sh 행으로 작성하기 시작하면 그에 대한 명령과 주석이 실행된다는 것을 기억하십시오.

이별의 말
스크립트의 거의 모든 줄에 가능한 한 많은 주석을 작성하는 것이 좋습니다. 시간이 지나면 한 번 작성된 스크립트를 변경하거나 현대화해야 합니다. 대본에 적힌 내용이 기억나지 않거나 이해가 되지 않으면 변경이 어려워지고 처음부터 작성하는 것이 더 쉽습니다.

필요한 스크립트:

    시스템이 부팅될 때 방화벽 규칙을 설정합니다.
    설정 및 데이터 백업을 수행합니다.
    메일 서버에 사서함 추가(더 정확하게는 mysql 데이터베이스에)
    특정 시간(가급적 매일 밤)에 프록시 서버 로그를 스캔하고 다운로드된 트래픽 양에 대한 편리한 웹 보고서를 발행하는 프로그램을 시작합니다.
    누군가가 ssh, 연결 시간 및 클라이언트 주소를 통해 우리 서버에 액세스한 정보를 메일로 전송합니다.

스크립팅 기술 정보
우리는 텍스트 파일을 만들고, 편집하고, 실행 권한을 설정하고, 실행하고, 오류를 확인하고, 수정하고, 실행하고, 오류를 확인합니다.
모든 것이 핥아지고 올바르게 작동하면 특정 시간 동안 자동로드 또는 스케줄러에 넣습니다.

———————————————————————————-

2. 내부 BASH 언어로 스크립트 작성 학습
원본: https://www.linuxconfig.org/Bash_scripting_Tutorial

이 튜토리얼에서는 Bash 내부 언어를 사용하여 스크립트(이하 스크립트라고 함)를 작성하는 방법에 대한 사전 지식이 없다고 가정합니다. 이 가이드의 도움으로 스크립트 작성이 매우 쉬운 작업임을 곧 알게 될 것입니다. "Hello World!" 문자열을 출력하는 간단한 스크립트로 튜토리얼을 시작하겠습니다. (영어 번역 - 안녕하세요 여러분!)

1. 시나리오 "안녕하세요"
다음은 첫 번째 bash 스크립트 예제입니다.

#!/bin/bash
echo "Hello World"

hello_world.sh 파일이 포함된 디렉토리로 변경하고 실행 가능하게 만드십시오.

코드: $ chmod +x hello_world.sh 모두 선택

실행을 위해 스크립트 실행

코드: $ ./hello_world.sh 모두 선택

2. 간단한 보관 bash 스크립트

#!/bin/bash
tar -czf myhome_directory.tar.gz /home/user

코드: $ ./backup.sh 모두 선택

$ du -sh myhome_directory.tar.gz
41M myhome_directory.tar.gz

3. 변수 작업
이 예에서는 간단한 변수를 선언하고 echo 명령을 사용하여 화면에 표시합니다.

#!/bin/bash
STRING="HELLO WORLD!!!"
에코 $STRING

코드: $ ./hello_world.sh 모두 선택
안녕하세요 세계!!!

변수가 있는 보관 스크립트:

#!/bin/bash
OF=myhome_directory_$(날짜 +%Y%m%d).tar.gz
IF=/홈/사용자
tar -czf $OF $IF

코드: $ ./backup.sh 모두 선택
tar: 멤버 이름에서 선행 "\" 제거
$ du -sh *tar.gz
41M myhome_directory_20100123.tar.gz

3.1 전역 및 지역 변수

#!/bin/bash
# 전역변수 선언
# 이 변수는 이 스크립트의 어느 곳에서나 사용할 수 있습니다.
VAR="전역 변수"
함수 bash(
# 지역변수 선언
# 이러한 변수는 선언된 함수에 대해서만 유효합니다.
로컬 VAR="로컬 변수"
에코 $VAR
}
에코 $VAR
세게 때리다
# 전역 변수는 변경되지 않았습니다.
에코 $VAR

코드: $ ./variables.sh 모두 선택
전역 변수
지역 변수
전역 변수

4. 스크립트에 인수 전달

#!/bin/bash
# 미리 정의된 변수를 사용하여 인수에 액세스
# 화면에 인수를 출력
에코 $1 $2 $3 ' -> 에코 $1 $2 $3'

# 특수 배열 args=("를 통해 인수에 액세스할 수도 있습니다. [이메일 보호됨]»)
# 화면에 인수를 출력
echo $(args) $(args) $(args) ' -> args=(“ [이메일 보호됨]»); 에코 $(인수) $(인수) $(인수)'

# 변수를 사용 [이메일 보호됨]모든 인수를 한 번에 표시하려면
에코 [이메일 보호됨]' -> 에코 [이메일 보호됨]

$# 변수를 사용하여 스크립트에 전달된 인수 수 표시
echo 전달된 인수의 수: $# ' -> echo 전달된 인수의 수: $#'

코드: 모든 $ ./arguments.sh 선택 Bash 스크립팅 자습서
Bash 스크립팅 튜토리얼 -> echo $1 $2 $3
Bash 스크립팅 튜토리얼 -> args=(" [이메일 보호됨]"); 에코 $(인수) $(인수) $(인수)
Bash 스크립팅 튜토리얼 -> 에코 [이메일 보호됨]
전달된 인수 수: 3 -> echo 전달된 인수 수: $#

5. 스크립트에서 셸 명령 실행

#!/bin/bash
# 백틱 » ` ` »을 사용하여 쉘 명령을 실행합니다.
echo `uname -o`
# 이제 따옴표 없이 시도해보자
에코 우나메 -o

코드: 모든 $ uname -o 선택
GNU/리눅스
$ ./bash_backtricks.sh
GNU/리눅스
우나메오

보시다시피 두 번째 경우에는 실행 결과가 아니라 명령 자체가 표시되었습니다.

6. 사용자 입력 읽기(상호작용)

#!/bin/bash
echo -e "안녕하세요, \c라는 단어를 입력하세요."
단어를 읽다
echo "입력한 단어는 $word입니다."
echo - "두 단어를 입력할 수 있습니까? »
단어1 단어2 읽기
echo "입력하신 내용은 다음과 같습니다: \"$word1\" \"$word2\""
echo - "bash 스크립팅에 대해 어떻게 생각하십니까? »
# 읽기 명령은 이제 기본 내장 변수 $REPLY에 응답을 저장합니다.
읽다
echo "$REPLY라고 하셨습니다. 반갑습니다! »
echo - "당신이 가장 좋아하는 색은 무엇입니까? »
# -a는 읽기 명령을 만들어 배열로 읽습니다.
읽기 - 색상
echo "내가 가장 좋아하는 색상은 $(colours), $(colours) 및 $(colours):-)입니다."

코드: $ ./read.sh 모두 선택
안녕하세요, 단어를 입력하세요: something
입력한 단어는 다음과 같습니다.
두 단어를 입력할 수 있습니까?
데비안 리눅스
다음은 입력한 내용입니다. "Debian" "Linux"
bash 스크립팅에 대해 어떻게 생각하십니까?
좋은
당신은 좋은 말을 듣게되어 기쁩니다!
가장 좋아하는 색상은 무엇입니까?
블루 그린 블랙
제가 좋아하는 컬러도 블루, 그린, 블랙이에요 :-)

7. 트랩 사용하기

#!/bin/bash
# 트랩 선언
트랩 bashtrap INT
# 화면 지우기
분명한;
# 사용자가 CTRL-C를 누를 때 후크 기능이 실행됩니다:
# 표시될 것입니다 => bash 트랩 서브루틴 실행 !
# 하지만 스크립트는 계속 실행됩니다.
배쉬트랩()
{
echo "CTRL+C 감지 !... bash 트랩 실행 중 !"
}
# 스크립트는 최대 10까지 계산합니다.
'seq 1 10'의 경우; 하다
echo "$a/10 종료합니다."
수면1;
완료
echo "배쉬 트랩 예제 종료!!!"

코드: $ ./trap.sh 모두 선택
1/10
2/10
3/10
4/10
5/10
6/10

7/10
8/10
9/10
CTRL+C 감지 !... bash 트랩 실행 중!
10/10
Bash Trap 예제 종료!!!

보시다시피 Ctrl-C 키 조합은 스크립트 실행을 중지하지 않았습니다.

8. 배열
8.1 단순 배열 선언

#!/bin/bash
# 요소가 4개인 간단한 배열 선언
ARRAY=('데비안 리눅스' '레드햇 리눅스' 우분투 리눅스)
# 배열의 요소 수를 가져옵니다.
요소=$(#ARRAY[@])

# 배열의 각 요소를 순환
((i=0;i<$ELEMENTS;i++)); do
에코 $(ARRAY[$(i)])
완료

코드: 모든 $./arrays.sh 선택
데비안 리눅스
레드햇 리눅스
우분투
리눅스

8.2 파일의 값으로 배열 채우기

#!/bin/bash
# 배열 선언
선언 -a ARRAY
# 실행 명령 # stdin(보통 키보드)은 이 파일에서 생성됩니다. 이를 통해 읽을 수 있습니다.
# 파일 내용을 한 줄씩 sed 및/또는 awk로 입력한 각 줄을 구문 분석합니다.
임원 10 letcount=0

LINE을 읽는 동안<&10; do

ARRAY[$count]=$LINE
((카운트++))
완료

echo 요소 수: $(#ARRAY[@])
# 배열 값 표시
에코 $(ARRAY[@])
# 파일을 닫는다
실행 10>&-

코드: 모든 $ cat bash.txt 선택
데비안 리눅스
레드햇 리눅스
우분투
리눅스
$ ./arrays.sh
요소 수: 4
데비안 리눅스 레드햇 리눅스 우분투 리눅스

9. if-then-else 조건
9.1. "if-else" 조건의 간단한 사용
조건이 작동하지 않는 대괄호 안의 공백에 주의하십시오.

#!/bin/bash
디렉토리="./BashScripting"

# 디렉토리가 존재하는지 확인
if [ -d $디렉토리 ]; 그 다음에
echo "디렉토리가 존재합니다"
또 다른
echo "디렉토리가 존재하지 않습니다"
파이

코드: 모두 $ ./if_else.sh 선택
디렉토리가 존재하지 않습니다
$ mkdir BashScripting
$ ./if_else.sh
디렉토리 존재

9.2 중첩된 if-else 조건

#!/bin/bash
# 값이 4인 변수 선언
선택=4
# 표시하다
에코 "1. 세게 때리다"
에코 "2. 스크립팅»
에코 "3. 지도 시간"

# 변수가 4일 때 실행
# 루핑
동안 [ $choice -eq 4 ]; 하다

# 사용자 입력 읽기
읽기 선택
# 중첩된 "if-else" 조건
if [ $choice -eq 1 ] ; 그 다음에

echo "선택한 단어: Bash"

if [ $choice -eq 2 ] ; 그 다음에
echo "선택한 단어: 스크립팅"
또 다른

if [ $choice -eq 3 ] ; 그 다음에
echo "선택한 단어: Tutorial"
또 다른
echo "1~3 사이에서 선택해주세요!"
에코 "1. 세게 때리다"
에코 "2. 스크립팅»
에코 "3. 지도 시간"
echo -n "단어를 선택하세요? »
선택=4
파이
파이
파이
완료

코드: $ ./nested.sh 모두 선택
1. 배시
2. 스크립팅
3. 튜토리얼

5

1. 배시
2. 스크립팅
3. 튜토리얼
단어를 선택하세요
4
1~3중 선택해주세요!
1. 배시
2. 스크립팅
3. 튜토리얼
단어를 선택하세요
3
당신은 단어를 선택했습니다: 튜토리얼

따라서 먼저 "while" 루프의 본문이 실행됩니다. 선택 변수는 처음에 4로 설정됩니다. 그런 다음 사용자 입력을 읽고 입력이 1.2 또는 3과 같지 않으면 루프 본문이 반복되는 것과 관련하여 변수를 다시 4로 만듭니다(1.2 또는 3을 다시 입력해야 함).

10. 비교
10.1 산술적 비교

중위<
-gt>
-르<=
-게 >=
-eq ==
-네 !=

#!/bin/bash

NUM1=2
NUM2=2
if [ $NUM1 -eq $NUM2 ]; 그 다음에
echo "두 값이 같음"
또 다른
echo "값이 같지 않습니다"
파이

코드: $ ./equals.sh 모두 선택
두 값 모두 동일

#!/bin/bash
# 정수 값으로 변수 선언
NUM1=2
NUM2=3
if [ $NUM1 -eq $NUM2 ]; 그 다음에
echo "두 값이 같음"
또 다른
echo "값이 같지 않습니다"
파이

코드: $ ./equals.sh 모두 선택
값이 같지 않음

#!/bin/bash
# 정수 값으로 변수 선언
NUM1=2
NUM2=1
if [ $NUM1 -eq $NUM2 ]; 그 다음에
echo "두 값이 같음"
elif [ $NUM1 -gt $NUM2 ]; 그 다음에
echo "$NUM1이 $NUM2보다 큽니다."
또 다른
echo "$NUM2는 $NUM1보다 큽니다."
파이

코드: $ ./equals.sh 모두 선택
2는 1보다 큼

10.2 문자-텍스트 비교

똑같다
!= 같지 않음
< меньще чем
> 이상
-n s1 변수 s1이 비어 있지 않습니다.
-z s1 변수 s1이 비어 있습니다.

#!/bin/bash

S1="배쉬"

S2="스크립팅"
if [ $S1 = $S2 ]; 그 다음에

또 다른
echo "문자열이 같지 않습니다"
파이

코드: $ ./statement.sh 모두 선택
문자열이 같지 않음

#!/bin/bash
# 기호 변수 S1 선언
S1="배쉬"
# 기호 변수 S2 선언
S2="배쉬"
if [ $S1 = $S2 ]; 그 다음에
echo "두 문자열이 같음"
또 다른
echo "문자열이 같지 않습니다"
파이

코드: $ ./statement.sh 모두 선택
두 문자열이 동일합니다.

11. 파일 확인

B 파일 이름 블록 특수 파일
-c 파일 이름 특수 문자 파일
-d directoryname 디렉토리 존재 여부 확인
-e filename 파일 존재 여부 확인
-f filename 디렉토리가 아닌 일반 파일 존재 여부 확인
-G filename 파일이 존재하고 유효한 그룹 ID가 소유하고 있는지 확인합니다.
-g filename 파일이 존재하고 set-group-id이면 true입니다.
-k 파일 이름 고정 비트
-L 파일 이름 심볼릭 링크
-O filename 파일이 존재하고 유효 사용자 ID가 소유한 경우 참입니다.
-r filename 파일이 읽을 수 있는지 확인
-S filename 파일이 소켓인지 확인
-s filename 파일 크기가 0이 아닌지 확인
-u filename 파일 set-ser-id 비트가 설정되었는지 확인
-w filename 파일이 쓰기 가능한지 확인
-x filename 파일이 실행 가능한지 확인

#!/bin/bash
파일="./파일"
if [ -e $파일 ]; 그 다음에
echo "파일이 존재합니다"
또 다른
echo "파일이 존재하지 않습니다"
파이

코드: $ ls 모두 선택
파일.sh
$ ./파일.sh
파일이 없습니다
$ 터치 파일
$ls
파일 file.sh
$ ./파일.sh
파일이 존재

마찬가지로 예제에서 "while" 루프를 사용하여 파일이 존재하지 않는지 확인할 수 있습니다. 이 스크립트는 파일이 존재할 때까지 잠자기 상태입니다. Bash 부정 "!"에 유의하십시오. -e 옵션을 무효화(반전)합니다.

12. 주기
12.1. For 루프

#!/bin/bash
# 루프
f의 경우 $(ls /var/); 하다
에코 $f
완료

bash 명령줄에서 for 루프 실행:

코드: $(ls /var/)에서 f에 대한 모든 $ 선택; 에코 $f; 완료 코드: $(ls /var/)에서 f에 대한 모든 $ 선택; 에코 $f; 완료
백업
은닉처
크래시
계략
라이브러리
현지의
자물쇠
통나무
우편
고르다
운영
스풀
시간
www

12.2. 동안 루프

#!/bin/bash
카운트=6
# 동안 루프
동안 [ $COUNT -gt 0 ]; 하다

COUNT=COUNT-1로 하자
완료

코드: $ ./while_loop.sh 모두 선택
개수 값: 6
개수 값: 5
개수 값: 4
카운트 값: 3
개수 값: 2
개수 값: 1

12.3. 루프까지

#!/bin/bash
카운트=0
#루프까지
[ $COUNT -gt 5 ]까지; 하다
echo count 값: $COUNT
COUNT=COUNT+1
완료

코드: $ ./until_loop.sh 모두 선택
카운트 값: 0
개수 값: 1
개수 값: 2
카운트 값: 3
개수 값: 4
개수 값: 5

12.4. 암시적 조건이 있는 루프
다음 예에서 while 루프의 조건은 표준 입력의 존재입니다.
루프의 본문은 표준 출력에서 ​​읽기 명령으로 리디렉션할 항목이 있는 한 실행됩니다.

#!/bin/bash
# 이 스크립트는 공백을 찾아 제거합니다.
# 파일에서 밑줄로 대체
디렉토리 = "."
루프에서 출력을 리디렉션하여 읽기 명령으로 루프를 제어합니다.
$DIR 유형 f 찾기 | 파일을 읽는 동안; 하다
# POSIX 클래스 [:space:]를 사용하여 파일 이름에서 공백을 찾습니다.
if [[ "$ 파일" = *[[:공간:]]* ]]; 그 다음에
# 공백을 밑줄로 대체
mv "$file" `에코 $file | tr ' ' _'`
파이;
완료

코드: 모든 $ ls -1 선택
스크립트.sh
$ touch "공백이 있는 파일"
$ ls -1
공백이 있는 파일
스크립트.sh
$ ./스크립트.sh
$ ls -1
file_with_spaces
스크립트.sh

13. 기능

#!/bin/bash
# 함수는 임의의 순서로 선언될 수 있습니다.
함수 function_B(
에코 기능 B.
}
함수 function_A(
에코 $1
}
함수 function_D(
에코 기능 D.
}
함수_C(
에코 $1
}
# 함수 호출
# 함수 A에 매개변수 전달
function_A "함수 A."
기능_B
# 함수 C 함수에 매개변수 전달
function_C "함수 C."
기능_D

코드: 모든 $ ./functions.sh 선택
기능 가.
기능 B.
기능 다.
기능 D.

14. 연산자 선택 - 선택

#!/bin/bash
PS3='한 단어 선택:'
# 고르다
"linux" "bash" "scripting" "tutorial"에서 단어 선택
하다
echo "선택한 단어는 $word입니다."
# 중단, 그렇지 않으면 루프가 무한합니다.
부서지다
완료
0번 출구

코드: 모두 $ ./select.sh 선택
1) 리눅스
2) 배쉬
3) 스크립팅
4) 튜토리얼
한 단어를 선택하십시오: 4
선택한 단어는 다음과 같습니다.

15. 선택 연산자 - 케이스

#!/bin/bash
echo "선호하는 프로그래밍/스크립팅 언어는 무엇입니까?"
echo "1) 강타"
에코 "2) 펄"
에코 "3) 파이톤"
에코 "4) C++"
echo "5) 몰라!"
케이스를 읽다;
# 간단한 케이스 선택 구조
# 이 예에서 $case는 변수일 뿐입니다.
# 그렇게 부를 필요는 없습니다. 이것은 단지 예일 뿐입니다
$케이스
1) echo "bash를 선택했습니다.";;
2) echo "펄을 선택했습니다.";;
3) echo "파이톤을 선택하셨습니다.";;
4) echo "C++를 선택하셨습니다.";;
5) 출구
이삭

코드: 모두 $ ./case.sh 선택
선호하는 프로그래밍/스크립팅 언어는 무엇입니까?
1) 배쉬
2) 펄
3) 파이톤
4) C++
5) 모르겠다!
4
C++를 선택하셨습니다.

———————————————————————————-

더 자세한 정보는 여기와 같은 다양한 출처에서 얻을 수 있습니다.
원본: https://www.linuxconfig.org/Bash_scripting_Tutorial
https://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/
https://bug.cf1.ru/2005-03-17/programmin … -book.html

https://ubuntologia.ru/forum/viewtopic.php?f=109&t=2296