1. 변수값을 선언하는 declare 명령어
declare -a array1=("water" "blue" "super") declare -a array2=("melon" "mountain" "stars") for i in "${!array1[@]}" do printf "%s\t%s\t%s\n" "$i" "${array1[$i]}" "${array2[$i]}" done
1. declare 명령어는 생략 가능
Array=( "sky:blue" "snow:white" "night:black" "apple:red") for object in "${ARRAY[@]}" do KEY=${object%%:*} VALUE=${object#*:} printf "%s's color is %s.\n" "$KEY" "$VALUE" done
2. 배열의 올바른 초기화
files=$(ls) (x) files=($(ls)) (x) files=(*) (O)
3. csv같은 쉼표로 구분된 문자열 처리하기
ex) youtube,ai,alphago,arduino,IoT
#!/bin/bash IFS=',' read -r -a array < $1 for element in "${array[@]}" do echo "---" > "$element.md" echo "name: $element" >> "$element.md" echo "title='$element'" >> "$element.md" echo "---" >> "$element.md" done
1. find 로 파일 삭제하기
find . -name "*.mp3" | xargs rm -rf
mp3 파일명에 공백이 포함되어 있는 경우 정상 작동 안됨
find . name "*.mp3" | xargs ls
2. -print0
find 명령어에 의해 검색된 모든 검색 결과의 마지막에 널문자를 넣어줌
find . -iname "*.mp3" -print0 | xargs -0 ls
위와 같은 명령어를 통해 널 문자로 구분된 파일명 얻을 수 있음, -print0 이 검색의 마지막 결과에 널 문자를 넣어주며, 파이프로 이어받은 xargs 의 -0 옵션이 이를 인식하여 구분
find . -name "*.mp3" -print0 | xargs -0 rm -rf
삭제 완료
1. maxdepth
find ./ maxdepth n -iname '*.sh'
현재 디렉토리에서 하위 n 단계 디렉토리까지의 .sh 파일 검색
2. -exec
find ./ -name "*.bak" -exec ls -l {} \;
- -find의 -exec 명령은 find 명령의 결과를 -exec 다음 명령의 입력으로 전달 해줌
- find 명령의 결과를 나타내는 전달 인자를 {}로 표시
- -exec 옵션의 적용 범위를 알기 위해서 전달해줄 명령의 끝에 \; 를 붙여주어야 함
따라서 다음과 같은 방법으로도 파일 삭제 가능find ./ -name "*.bak" -exec rm -rf {} \;
3. 다양한 검색 옵션
1. (타입 지정)-type
find ./ -type d
디렉토리 검색
2. 숨김파일 검색 (".*")
find ~/ -maxdepth 1 -name ".*"
3. 중복조건
find ./ \( -user user -a -perm 644 \) -print | xargs ls -l
- (..) 를 이용하여 조건 작성
- 소괄호는 '\' 로 escape 시켜주기
- -a 로 조건 구분
!!오류!!