在脚本内分配变量并在同一脚本中使用它

在脚本内分配变量并在同一脚本中使用它
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

相关内容