[컴][리눅스] bash script 예제

bash function example / shell script function / function in shell script / 쉘스크립트에서 함수 사용 / bash 함수 사용 / 함수 사용법 / bash 의 if 사용법 / linux shell script programming / script examples / new line / add new line / newline in bash / new line

bash script 예제

함수 parameter 사용

# run.sh

#!/bin/sh
get_val()
{
  param=$1
  echo $param
}

re=$(get_val "test")
echo $re
$> run.sh
test

함수의 return 을 주는 법

function get_dir(){
    
    declare -n ret=$1
    local dirlist=$(find $2 -mindepth 1 -maxdepth 1 -type d)
    
    ret=$dirlist
}

get_dir result .
dirlist=$result

declare -n ret=$1 를 하면 1번째 parameter 에 대한 reference ret를 declare(선언)하게 된다. 그래서 이 ret 에 assign 을 하면, 첫번째 parameter 로 넘어가게 된다.

string 에 \n(new line) 을 넣는법

아래처럼 \n 을 추가할 수 있다. 그리고 echo 에 "(쌍따옴표) 를 주면 된다. 쌍따옴표를 안주면, new line 이 적용되지 않은 string 이 print 된다.

printf -v commands "$commands\n$cmdAdded"
echo "$commands"
echo -e 'a\nb'
a
b

bash script 로 넘기는 인자수(argument count) 를 check 하는 법

if [ "$#" -ne 1 ]; then
    echo "Usage: run.sh <filename>"
fi

file/directory 존재 여부

if [ ! -d $dstPath]
then
    echo "$dstPath does NOT exist"
fi
if [ ! -f $dstFile]
then
    echo "$dstFile does NOT exist"
fi

example

현재 directory 에 있는 directory 명에 대해 mkdir <directory_name> string을 만들고, 현재 directory 에 있는 file 명에 대해 ls <file_name> string 을 만드는 script

#!/bin/bash


function get_dir(){
    # https://stackoverflow.com/questions/3236871/how-to-return-a-string-value-from-a-bash-function/38997681#38997681
    declare -n ret=$1
    # https://stackoverflow.com/questions/2437452/how-to-get-the-list-of-files-in-a-directory-in-a-shell-script/71345102#71345102
    local dirlist=$(find $2 -mindepth 1 -maxdepth 1 -type d)
    
    ret=$dirlist
}

function get_files(){
    declare -n ret=$1
    # https://stackoverflow.com/questions/2437452/how-to-get-the-list-of-files-in-a-directory-in-a-shell-script/71345102#71345102
    local files=$(find $2 -maxdepth 1 -type f)

    ret=$files
}

# --------------------
# main
# --------------------

commads=''

get_dir result .
dirlist=$result

for dir in $dirlist
do
    cmdAdded="mkdir $dir"
    printf -v commands "$commands\n$cmdAdded"
done


get_files result ~/a/prog
files=$result
for file in $files
do
    cmdAdded="ls $file"
    printf -v commands "$commands\n$cmdAdded"
done

# https://stackoverflow.com/questions/3005963/how-can-i-have-a-newline-in-a-string-in-sh
# without quote, newline does not work
echo "$commands"

See Also

  1. Introduction to if: bash 의 if 문법
  2. 쿠…sal: [컴] 알아두면 좋을 linux commands

댓글 없음:

댓글 쓰기