2012-10-11 95 views
1
linux 3.5.6-1.fc17.x86_64 
GNU bash, version 4.2.37 

你好,将参数传递给一个bash脚本

我有以下bash脚本文件。我正在使用它来测试我的程序。但是,我希望能够测试使用和不使用valgrind。所以我从命令行'valgrind'得到参数并在if语句中进行比较。然而,随着时间的推移,我的测试用例会变得更大,我将不得不在if-else中重复大量代码。有没有办法将这个if-else最小化?

非常感谢您的任何建议,

#!/bin/bash 

# Abort on error 
set -e 

echo $1 

if [ "$1" == "valgrind" ]; then 
    echo "TEST STARTED RUNNING WITH VALGRIND" 
    echo "TEST CREATE DATABASE" 
    valgrind ./db db.dat c 
    echo "TEST CREATE DATABASE OK" 

    echo "TEST INSERT" 
    valgrind ./db db.dat s 1 steve [email protected] 
    valgrind ./db db.dat s 2 ben [email protected] 
    valgrind ./db db.dat s 3 lisa [email protected] 
    echo "TEST INSERT OK" 

    echo "TEST LIST" 
    valgrind ./db db.dat l 
    echo "TEST LIST OK" 

    echo "TEST DELETE" 
    valgrind ./db db.dat d 2 
    echo "TEST DELETE OK" 

    echo "TEST LIST" 
    valgrind ./db db.dat l 
    echo "TEST LIST OK" 

    echo "TEST FETCH" 
    valgrind ./db db.dat g 2 
    valgrind ./db db.dat g 3 
    echo "TEST FETCH OK" 

    echo "TEST COMPLETED OK" 
else 
    echo "TEST STARTED" 
    echo "TEST CREATE DATABASE" 
    ./db db.dat c 
    echo "TEST CREATE DATABASE OK" 

    echo "TEST INSERT" 
    ./db db.dat s 1 steve [email protected] 
    ./db db.dat s 2 ben [email protected] 
    ./db db.dat s 3 lisa [email protected] 
    echo "TEST INSERT OK" 

    echo "TEST LIST" 
    ./db db.dat l 
    echo "TEST LIST OK" 

    echo "TEST DELETE" 
    ./db db.dat d 2 
    echo "TEST DELETE OK" 

    echo "TEST LIST" 
    ./db db.dat l 
    echo "TEST LIST OK" 

    echo "TEST FETCH" 
    ./db db.dat g 2 
    ./db db.dat g 3 
    echo "TEST FETCH OK" 

    echo "TEST COMPLETED OK" 
fi 

回答

4

我会做这样的

VALGRIND="" 
if [ "$1" == "valgrind" ] 
then 
    VALGRIND="valgrind" 
fi 

echo "TEST STARTED" 
echo "TEST CREATE DATABASE" 
$VALGRIND ./db db.dat c 
echo "TEST CREATE DATABASE OK" 
... 
+1

或者,你可以拿起VALGRIND'的'从调用环境中的值。将初始化保留在脚本之外,当您想要使用'valgrind':'VALGRIND = valgrind test.sh'时将其初始化。 – chepner