<Linux Shell Script Chapter 6> - 배열

심우열·2023년 2월 22일
0

Linux Shell Script

목록 보기
15/17

1. 배열

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

2. 배열과 glob, 그리고 루프문

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

3. find 와 print0

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

삭제 완료

4. 명령어(find)

1. maxdepth

find ./ maxdepth n -iname '*.sh'

현재 디렉토리에서 하위 n 단계 디렉토리까지의 .sh 파일 검색

2. -exec

find ./ -name "*.bak" -exec ls -l {} \;
  1. -find의 -exec 명령은 find 명령의 결과를 -exec 다음 명령의 입력으로 전달 해줌
  2. find 명령의 결과를 나타내는 전달 인자를 {}로 표시
  3. -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
  1. (..) 를 이용하여 조건 작성
  2. 소괄호는 '\' 로 escape 시켜주기
  3. -a 로 조건 구분

    !!오류!!
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글