【发布时间】:2017-08-10 17:02:05
【问题描述】:
为了执行一项任务,我需要以精确的顺序发出两个触摸命令: 触摸 aaaa-ref-bbb.done touch cccc-grp-dddd.done
Being aaaa .. dddd 任何类型的字符串。第一个字符串包含“-ref-”,第二个字符串包含“-done-”
我想制作一个脚本来应用两个触摸命令,而与传递参数的顺序无关。
例如(参数顺序错误)
./script.sh bla-grp-bla bleh-ref-bleh
将产生一个输出
touch bleh-ref-bleh 触摸 bla-grp-bla
如果参数写入顺序正确,则触摸命令遵循正确的顺序。
我已经做了几次尝试,每次更改都更接近目标,但现在我被卡住了。 你能帮忙吗?
#### tool for touch debug mode (set -x / set +x)
#!/bin/bash
#
#### USAGE
##### Constants
#start debug code
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
FIRSTPARAM=$1
SECONDPARAM=$2
echo $FIRSTPARAM
echo $SECONDPARAM
dotouch()
{
if [[ "$FIRSTPARAM" =~ 'ref' ]]; then
echo 'correct order, processing...'
sleep 3
firsttouch = $FIRSTPARAM'.done'
secondtouch = $SECONDPARAM'.done'
echo $firsttouch
touch $firsttouch
sleep 1
touch $secondtouch
echo "touch was" $1 $2
else
secondtouch = $FIRSTPARAM'.done'
firstouch = $SECONDPARAM'.done'
touch $firsttouch
sleep 1
touch $secondtouch
echo "touch was" $2 $1
fi
}
if [ "$FIRSTPARAM" =~ "ref" ] || [ "$FIRSTPARAM" =~ "grp" ]; then
dotouch()
echo "touch commands executed"
exit 0
else
echo "Usage: $0 [xxxx_ref_xxxx.tar] [xxxx_grp_yyyy.tar] "
exit 1
fi
exit 0
#end debug code
set +x
【问题讨论】:
-
您能否再次阅读您的问题并修复错误?示例:在第一句中,您给出了文件名的示例,在第二句中,您声明一个字符串包含
-ref-,这是正确的,但您还声明另一个字符串包含-done-,这是不正确的。然后,您的脚本使用了明显错误的变量名(请参阅 asalamon74 的回答)。请帮助我们帮助您。 -
我已经修复了尽可能多的错误。谢谢提醒。
-
您的前两个示例字符串仍然不包含
-done-子字符串。