<commit_before>

BASH 에서의 조건문, if 사용방법 

If-else 구문의 형식은 다음과 같다.
if [ conditons ]
then
   실행하고자 하는 문장
fi
 
#########
if [ conditons ]
then
   조건만족시 실행하고자 하는 문장
else
   조건 불만족시 실행하고자 하는 문장
fi
 
##########
if [ conditons ]
then
   조건만족시 실행하고자 하는 문장
elif [ conditons ]
   두번째 조건 만족시 실행 문장
else
   조건 불만족시 실행하고자 하는 문장
fi
 
<예. IfTest1.sh>
 
if 조건문에서 사용되는 연산자들에는 다음과 같은 것들이 있다.
 
l         문자열체크
[ stringName ] - 문자열이 널(NULL)인지 체크, Null이 아니면 참
[ -n stringName ] - 문자열의 사이즈가 0 이상인지 체크, 0 이상이면 참
[ -z stringName ] - 문자열의 사이즈가 0 인지 체크, 0이면 참
[ stringNameA = stringNameB ] - A문자열과 B문자열이 같은지 체크, 같으면 참
[ stringNameA != stringNameB ] - A문자열과 B문자열이 다른지 체크, 다르면 참
 
l         숫자 대소 관계 체크
[ intA -ge 100 ] - 숫자 A가 100보다 크거나 같은지 체크, 100 이상이면 참
[ intA -gt 100 ] - 숫자 A가 100보다 큰지 체크, 100이 넘으면 참
[ intA -le 100 ] - 숫자 A가 100보다 작거나 같은지 체크, 100 이하이면 참
[ intA -lt 100 ] - 숫자 A가 100보자 작은지 체크, 100 미만이면 참
 
l         파일 체크
[ -r filename ] - 해당 파일이 읽기 가능한지 체크
[ -w filename ] - 해당 파일이 쓰기 가능한지 체크
[ -x filename ] - 해당 파일이 실행 가능한지 체크
[ -s filename ] - 해당 파일의 사이즈가 제로 이상인지 체크
[ -d filename ] - 해당 파일이 디렉토리 파일인지 체크
[ -f filename ] - 해당 파일이 보통 파일인지 체크
[ -h filename ] - 해당 파일이 링크 파일인지 체크
 
l         조건문의 결합
[ 조건문A -a 조건문B ] - 조건문 A와 B가 모두 참인지 체크, -a는 AND
[ 조건문A -o 조건문B ] - 조건문 A와 B중 참이 하나라도 있는지 체크, -o는 OR
 
<예. IfTest2.sh>
 
case문도 제공을 하는데 형식은 다음과 같다.
case $변수명 in
문장1)
       첫번째 명령어;;
문장2)
       두번째 명령어;;
문장3)
       세번째 명령어;;
*)
       Default 명령어;;
esac
 
<예. caseTest.sh>
 
 
제어문(반복문)
while문의 형식은 다음과 같다.
while [ 조건 ]
do
명령어 구문
done
 
<예. whileTest.sh>
#!/bin/sh
while [ $# -gt 0 ]
   echo "< $1 명령 실행 > "
   $1
   Shift
done
 
위의 예제에서 shift 명령어를 사용하는데. Shift는 인수로 들어온 내용을 하나씩 옮겨가는 기능을 한다. 즉, shift가 한번 실행되면 $1은 $2이 되고 $2는 $3이 된다.(???)
 
until 구문과 비교해보라..
#!/bin/sh
until [ $# -le 0 ]
   echo "< $1 명령 실행 > "
   $1
   Shift
done
 
for 구문의 형식은 다음과 같다.
for 변수명 in value1 value2 ...
do
   반복 실행 문장
done
 
while/until 에서 사용한 예제를 for로 변경하면 다음과 같다.
#!/bin/sh
for variable in $*                     # $* : 인수로 들어온 모든 문자열
do
       echo “< $variable 명령 실행>”
       $variable
done
 
for 키워드 뒤에 변수명(variable)이 오고 in 키워드 뒤에 값들이 나열된다. 이것은 in 뒤에 있는 값이 하나씩 variable에 할당이 되면서 값의 할당이 끝날때까지 do~done를 반복한다.
<예. breakContinue.sh>
 
<예. runCmd>
여러 개의 쉘 명령어를 한꺼번에 실행하도록 만들어 주는 예제
쉘 명령어가 옵션이 있는지 여부를 체크하고, 옵션이 있으면 옵션과함께 명령어를 실행하고 옵션이 없으면 명령어만 실행하는데, 이를 위해 while문과 다중 if문, case문을 사용한다.
 
 
함수 작성
함수를 사용하려면 스크립트의 시작부에 정의가 되어 있어야 한다.
함수의 형식은 다음과 같다.
함수명()
{
       함수 내용
}
 
함수 호출은 인자가 없는 함수는 함수명만 호출하면 되고, 인자가 있는 함수는 함수명 뒤에 인자를 나열해주면 된다.( 괄호는 쓰지 않는다.)
함수 내부에서 넘겨받은 인자를 쓰는 방법은 쉘 프로그램이 인자를 쓰는 방법과 같다.($1, $2, …)




exit 113   # 쉘에게 113을 리턴함.
# 확인해 보려면 이 스크립트가 종료된 다음에 "echo $?"라고 쳐 보세요.

<commit_msg>Update shell_script.txt<commit_after>

BASH 에서의 조건문, if 사용방법 

If-else 구문의 형식은 다음과 같다.
if [ conditons ]
then
   실행하고자 하는 문장
fi
 
#########
if [ conditons ]
then
   조건만족시 실행하고자 하는 문장
else
   조건 불만족시 실행하고자 하는 문장
fi
 
##########
if [ conditons ]
then
   조건만족시 실행하고자 하는 문장
elif [ conditons ]
   두번째 조건 만족시 실행 문장
else
   조건 불만족시 실행하고자 하는 문장
fi
 
<예. IfTest1.sh>
 
if 조건문에서 사용되는 연산자들에는 다음과 같은 것들이 있다.
 
l         문자열체크
[ stringName ] - 문자열이 널(NULL)인지 체크, Null이 아니면 참
[ -n stringName ] - 문자열의 사이즈가 0 이상인지 체크, 0 이상이면 참
[ -z stringName ] - 문자열의 사이즈가 0 인지 체크, 0이면 참
[ stringNameA = stringNameB ] - A문자열과 B문자열이 같은지 체크, 같으면 참
[ stringNameA != stringNameB ] - A문자열과 B문자열이 다른지 체크, 다르면 참
 
l         숫자 대소 관계 체크
[ intA -ge 100 ] - 숫자 A가 100보다 크거나 같은지 체크, 100 이상이면 참
[ intA -gt 100 ] - 숫자 A가 100보다 큰지 체크, 100이 넘으면 참
[ intA -le 100 ] - 숫자 A가 100보다 작거나 같은지 체크, 100 이하이면 참
[ intA -lt 100 ] - 숫자 A가 100보자 작은지 체크, 100 미만이면 참
 
l         파일 체크
[ -r filename ] - 해당 파일이 읽기 가능한지 체크
[ -w filename ] - 해당 파일이 쓰기 가능한지 체크
[ -x filename ] - 해당 파일이 실행 가능한지 체크
[ -s filename ] - 해당 파일의 사이즈가 제로 이상인지 체크
[ -d filename ] - 해당 파일이 디렉토리 파일인지 체크
[ -f filename ] - 해당 파일이 보통 파일인지 체크
[ -h filename ] - 해당 파일이 링크 파일인지 체크
 
l         조건문의 결합
[ 조건문A -a 조건문B ] - 조건문 A와 B가 모두 참인지 체크, -a는 AND
[ 조건문A -o 조건문B ] - 조건문 A와 B중 참이 하나라도 있는지 체크, -o는 OR
 
<예. IfTest2.sh>
 
case문도 제공을 하는데 형식은 다음과 같다.
case $변수명 in
문장1)
       첫번째 명령어;;
문장2)
       두번째 명령어;;
문장3)
       세번째 명령어;;
*)
       Default 명령어;;
esac
 
<예. caseTest.sh>
 
 
제어문(반복문)
while문의 형식은 다음과 같다.
while [ 조건 ]
do
명령어 구문
done
 
<예. whileTest.sh>
#!/bin/sh
while [ $# -gt 0 ]
   echo "< $1 명령 실행 > "
   $1
   Shift
done
 
위의 예제에서 shift 명령어를 사용하는데. Shift는 인수로 들어온 내용을 하나씩 옮겨가는 기능을 한다. 즉, shift가 한번 실행되면 $1은 $2이 되고 $2는 $3이 된다.(???)
 
until 구문과 비교해보라..
#!/bin/sh
until [ $# -le 0 ]
   echo "< $1 명령 실행 > "
   $1
   Shift
done
 
for 구문의 형식은 다음과 같다.
for 변수명 in value1 value2 ...
do
   반복 실행 문장
done
 
while/until 에서 사용한 예제를 for로 변경하면 다음과 같다.
#!/bin/sh
for variable in $*                     # $* : 인수로 들어온 모든 문자열
do
       echo “< $variable 명령 실행>”
       $variable
done
 
for 키워드 뒤에 변수명(variable)이 오고 in 키워드 뒤에 값들이 나열된다. 이것은 in 뒤에 있는 값이 하나씩 variable에 할당이 되면서 값의 할당이 끝날때까지 do~done를 반복한다.
<예. breakContinue.sh>
 
<예. runCmd>
여러 개의 쉘 명령어를 한꺼번에 실행하도록 만들어 주는 예제
쉘 명령어가 옵션이 있는지 여부를 체크하고, 옵션이 있으면 옵션과함께 명령어를 실행하고 옵션이 없으면 명령어만 실행하는데, 이를 위해 while문과 다중 if문, case문을 사용한다.
 
 
함수 작성
함수를 사용하려면 스크립트의 시작부에 정의가 되어 있어야 한다.
함수의 형식은 다음과 같다.
함수명()
{
       함수 내용
}
 
함수 호출은 인자가 없는 함수는 함수명만 호출하면 되고, 인자가 있는 함수는 함수명 뒤에 인자를 나열해주면 된다.( 괄호는 쓰지 않는다.)
함수 내부에서 넘겨받은 인자를 쓰는 방법은 쉘 프로그램이 인자를 쓰는 방법과 같다.($1, $2, …)




exit 113   # 쉘에게 113을 리턴함.
# 확인해 보려면 이 스크립트가 종료된 다음에 "echo $?"라고 쳐 보세요.



##### shell function
function pushpi()
{ 
  local URL=mycloud.no-ip.org
  local PORT=2234
  local USER=pi
  local FOLDER=/media/USBdrive/ncdata/admin/files/
  local OPTS=( -aui --progress --stats --inplace --partial )
  rsync ${OPTS[@]} -e "ssh -p $PORT" $@ $USER@$URL:$FOLDER
}

pushpi this_file_or_folder file2 file3
{'fraction_non_alphanumeric': 0.10404112017015243, 'fraction_numerical': 0.024104927330733782, 'mean_word_length': 2.1755768148564996, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1656789', 'n_tokens_mistral': 4116, 'n_tokens_neox': 5395, 'n_words': 1001}