スクリプト内で変数を割り当て、同じスクリプトで使用する

スクリプト内で変数を割り当て、同じスクリプトで使用する
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

スクリプトは、スクリプトのコマンドラインでユーザーが提供した引数から日付と時刻を取得します。次に、デフォルトのファイル名の一致を使用してアーカイブする必要があるディレクトリを一致させ、一度に1つのディレクトリのみを処理します。ニーズに合わせてパターンを編集してください。

これに対する小さな変更は、パスを$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

おすすめ記事