짧은 버전
dudek가 이미 답변했습니다. 해당 디렉토리는 시스템에 연결하거나 연결을 끊는 방법을 시스템에 알려주는 스크립트에 사용됩니다.
문제의 스크립트를 이해하는 방법에 대한 설명은 "긴 버전"을 참조하십시오. 기본적으로 일부 검사를 실행하고 일부 externall 함수를로드 한 후 start
명령 시퀀스를 실행해야하는지 stop
또는 오류 및 종료를 수행해야하는지 검사합니다 .
예, RPi가 좋아하지 않는 방식으로 네트워킹 구성을 만지면 원격 액세스를 차단할 수 있습니다. 과거에는 RPi에서 네트워킹 구성을 대략 만져 새로 설치를 시작하는 것이 더 간단했습니다. 조심해서 RPi를 일시적으로 현지에 로그인하기 쉬운 위치로 옮기는 것을 고려하십시오.
긴 버전
내 RPi 에서이 파일을 살펴보면 주석이 잘 달렸으며 많은 외부 함수 호출에 사용되지 않습니다. 그러나 당신은 평신도 용어를 요구했기 때문에 당신이 나와 같은 RPi 사용자 인 것처럼 보이기 때문에 이러한 종류의 스크립트를 이해하는 방법을 설명하기 위해 최선을 다하겠습니다. 나는을 벌써 온 이상 writen 한 내용을 확인 와나 수 RPI StackExchange 이 서버 요구 사항에 유용한 다른 트릭이있을 수 있습니다으로 숨겨진 무선 네트워크에 자동 reconection을 위해.
귀하의 질문에 대한 답변을 돕기 위해 약간의 쉘 스크립팅 구문 설명이 있습니다.
쉘 ~.sh
스크립트 에서는 이와 같이 정의 된 함수를 찾는 것이 일반적입니다 .
function_name () {
echo "doing stuff for function_name"
}
function_name
스크립트에서 후자를 통해 , 때로는 다른 함수 내에서 호출됩니다. 함수, 스크립트 파일 및 if 문은 실행할 명령 목록 일뿐입니다. 사이의 물건 기능의 경우 {
와는 }
실행과의 경우 if
사이의 물건 문에서도 then
하고 fi
실행하고 instences에서 else
또는 elif
내에서 사용되는 if
조건부 문에서도.
파일을 위해 우리라는 기능이 있습니다 disecting하고 do_start
, do_stop
다른 파일에 정의 된 일부 기능 ... "이러한 다른 기능을 definded 무엇 파일이?" 또는 "스크립트 a가 파일 b에서 함수를로드하는지 어떻게 알 수 있습니까?" 먼저 대답해야 할 두 가지 질문이 있습니다.
라인 주위 48
에 /etc/wpa_supplicant/ifdown.sh
주석 처리 라인 (와 즉 라인 beguining있다 #
simble, 이들은 주로 ... 스크립트 intrupriter 무시)와 source functions
coventently 다음 몇 줄이 'perpos 의도 labbling가 ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
이것은 스크립팅 동작의 좋은 예입니다. 파일이 있다고 가정하기 전에 파일이 있는지 확인합니다.
첫 번째 비트 if [ -f
는 정의 된 파일 경로에서 파일을 확인하는 것입니다. 그리고 then
경로를 통해 정의 된 파일을 통해 파일의 현재 로드 내용 source
( source
명령의 약자 는 .
있지만 스크립트에서 사용하지 않는 것이 좋습니다 cp
. 다음으로 else
해당 파일을 찾을 수없는 경우 스크립트 exit 0
상태로 종료 0
하십시오. 그런 다음 첫 번째 if
통계가 fi
통과되지 않으면 조치가 종료됩니다 . 즉, /etc/wpa_supplicant/functions.sh가 그렇지 않은 경우그런 다음 종료하고, 그렇지 않으면 해당 기능을로드하고 처리를 계속하십시오. 값이나 파일이 존재하는 경우 이러한 종류의 이중 검사는 다른 스크립트뿐만 아니라 다른 스크립트, -f
파일 -n
검사, 문자열 길이 -x
검사, 파일이 있는지 여부뿐만 아니라 파일이 있는지 검사합니다. 스크립트를 실행하는 사용자에게 정의 된 파일에 대한 실행 권한이있는 -s
경우 파일이 비어 -n
있는지 확인하고, 문자열이 비어 있는지 또는 null
값 이 아닌지 확인하고, 문자열에서 =
문자열 (또는 값)을 비교합니다 if
. if
통계가있는 Linux의 쉘 및 bash 스크립트 elif
에는 다른 것이 있지만 다른 날입니다. 이 스크립트에는 다음과 같은 다른 트릭이 사용됩니다.if
온라인과 같은 ||
"or", &&
"and"및 !
"not"연산자와 같은 문장 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
에 의해 정의 된 파일이있는 경우 ~ 간단하게 상태를 넣어하는 $WPA_SUP_BIN
것입니다 하지 실행 파일 또는 의해 정의 된 파일 $WPA_CLI_BIN
입니다 없는 상태로 실행하고 종료 0
더 처리하지 않고. 이것들은 처음에는 복잡해 보일 수 있지만 좀 더 인간적인 구문으로 큰 소리로 읽는 것은 처음 배울 때, 간단한 것을 배울 때 도움이 될 수 있으며 #
복잡한 것을 위해 주석을 추가 하는 것은 학습하거나 주제에 다시 올 때 정말 도움이됩니다.
파일 내부에서 무엇을 호출했는지 확실하지 않은 경우 내부에서 제공되는 파일도 검사해야 ifupdown.sh
합니다. 나는 좋을 것 nano /etc/wpa_supplicant/functions.sh
다음 사용 ^w
또는 Ctrl+w
당신이 더 많은 약을 알고 싶은 것을 함수의 이름을 주위를 검색 할 수 있습니다. 어떤 작업이이 스크립트를 호출하는지와 functions.sh
대부분의 퍼즐 퍼즐 의 충돌 이 발견되기 때문입니다.
이제 통계가 시작 135
되는 곳에서 조금 다른 '라운드 라인'을 case
잃어 버렸습니다. 이러한 유형의 진술은 opearation을 해독하는 데 사용할 수있는 sertain 구조를 가지고 있습니다.
case $some_variable in
start)
echo "The word [start] was detected in \$some_variable"
;;
stop)
echo "The word [stop] was detected in \$some_variable"
;;
*)
echo "The word [$some_variable] was detected in \$some_variable but not understood"
;;
esac
기타와 마찬가지로 위의 예에서 case
문에서도 우리가 본질적 내용을 검색하는 $some_variable
, 즉 핵심 단어가 defiened 위해를 start
또는 stop
과 키워드 후 발견되면 문제 명령을 trailling 사이에서 발견 )
하고 preseading ;;
그 다양한 키를 취할 differant 작업을 sepperate하는 역할 단어가 발견되었습니다. 일부 스크립트에서는 루프 case
내에서 이러한 명령문을 찾을 수 for
있지만 다른 날에도 적용됩니다.
의 경우 case
내 문 ifupdown.sh
스크립트 우리는 먼저 일치하고 start
또는 stop
내 상태를 $MODE
변수 사용하는 $PHASE
경우에 맞게 값을 pre-up
또는 post-up
명령의 순서를 호출해야 하거나 경우 생성 pre-down
또는 post-down
명령의 시퀀스가 대신 호출해야합니다. niether start
또는 stop
감지 된 위치가 없으면 오류가 기록되고 인쇄되며 스크립트는 1
오류 상태와 함께 종료됩니다 .