스크립트 내에서 변수를 할당하고 동일한 스크립트에서 사용

스크립트 내에서 변수를 할당하고 동일한 스크립트에서 사용
echo -e '(b) \033[3;32m  for between hours\033[m';
echo -e ' please choose \033[32;5m (a or b)\033[m';
read option
#if [ "$option" == "a" ]
#then
        destination="/home/siva/test"
        echo -e 'date in format: \033[33;5m(mm-dd-yy) eg.10-30-22\033[m '       # date format of thread_dumps needed
        read -p "enter date : " D                               #enter the date of thread_dumps needed
        echo -e 'hour in format: \033[33;5m( HH )\033[m'
        read -p "enter Time (HH:MM) : " T   #enter specific hour of thread_dumps needed
        H= echo $T | awk '{print substr($1,1,2)}'

        find=`find /home/siva/thread_dumps/thread_dump_"$D"_"$H"\:[0-9][0-9]\:0[1-2]`

        echo $find
        #cp $find $destination

       # zip -r /home/siva/zip/thread_dumps_"$D".zip $find

위 스크립트에서는 변수를 할당하고 싶습니다 (H= echo $T | awk '{print substr($1,1,2)}). 동일한 스크립트에서 이 변수를 사용하고 싶습니다. 그러나 이것은 나에게 효과가 없습니다. echo변수로 출력하여 find명령에 사용하고 싶습니다.

답변1

find확실하지는 않지만 코드에 필요한 것 같지 않습니다. 명령줄 인수에서 사용자 입력을 얻는 경우에도 사용자 상호 작용이 필요하지 않습니다.

#!/bin/sh -u

# Usage:
#
# ./script MM-DD-YY HH
#

archive=$HOME/zip/thread_dumps_${1}.zip

if [ -e "$archive" ]; then
        printf '"%s" already exists\n' "$archive" >&2
        exit 1
fi

for dirpath in "$HOME/thread_dumps/thread_dump_${1}_${2}":??:??
do
        if [ -d "$dirpath" ]; then
                printf 'Processing "%s"\n' "$dirpath" >&2
                zip -r "$archive" "$dirpath"
        fi
done

스크립트는 스크립트의 명령줄에서 사용자가 제공한 인수로부터 날짜와 시간을 가져옵니다. 그런 다음 기본 파일 이름 일치를 사용하여 보관해야 하는 디렉터리를 일치시키고 한 번에 하나의 디렉터리만 처리합니다. 필요에 맞게 패턴을 수정하세요.

이것에 대한 작은 변화는 경로를 $HOME아카이브로 추출하기 위해 경로가 아카이브에 저장되지 않도록 하는 것입니다 tread_dumps.

루프를 다음으로 변경하면 됩니다.

for dirpath in "$HOME/thread_dumps/thread_dump_${1}_${2}":??:??
do
        if [ -d "$dirpath" ]; then
                printf 'Processing "%s"\n' "$dirpath" >&2
                ( cd "$HOME" && zip -r "$archive" "${dirpath#$HOME/}" )
        fi
done

관련 정보