shell启动脚本给C程序传参
在Linux环境下开发C程序,若想要可选择性的给程序传递外部参数,最后是以启动脚本的形式间接进行传递,这样对于命令行的参数解析工作将集中到shell脚本中,大大增加C代码的可移植性。
shell脚本给C程序传参最常用的方法有两种,在执行C程序时使用命令行传参,要求命令行参数的位置固定(在C程序中不加入额外参数标识解析模块情况下),另外一种方法相对灵活,即使用环境变量的方式进行传参。
针对以上方法,举一个简单例子:
#!/bin/sh
ECHO="echo"
FPARG="-p"
FSARG="-s"
FILEPATH="0"
FILESIZE="0"
function printHelp(){
ehco ""
echo "<Archerfoo>My Demo Script"
echo ""
echo "$0 $FPARG 指定文件路径"
echo "$0 $FSARG 指定文件阈值"
echo ""
echo "Usage:"
echo "$0 -p ./test.txt -s 100 "
}
while [ $# -gt 0 ]; do
arg=$1
case "$arg" in
$FPARG
$ECHO "Input file: $2"
FILEPATH=$2;
shift
shift
continue;;
$FSARG
$ECHO "Set size: $2"
export FILESIZE=$2
shift
shift
continue;;
*)
echo "Unknown Argument: $*"
printHelp
exit 1
break;;
esac
done
if [ 0 == $FILEPATH ]
$ECHO "Test default file: test.txt"
./fileTest
else
$ECHO "Test file: $FILEPATH"
./fileTest $FILEPATH
fi
$ECHO "Test Succeed !"
上面的shell脚本调用fileTest应用程序检验目标文件的大小是否超出阈值,通过命令行将文件路径传递给C程序,通过环境变量将阈值传递给C程序。shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。
int main(int argc, char *argv[])
{
const char *filePath = (argc > 1)? argv[1]: "test.txt";
const char *env_name = "FILESIZE";
char *env_str = getenv(env_name);
double fileSize = 0;
printf("file: %s\n", filePath);
if (NULL == env_str)
fileSize = 100;
else
printf("file size: %f\n", fileSize);
...
return 0;
}
在C程序中的main函数传入命令行参数,通过getenv()函数获取指定的环境变量值。
还没有评论,来说两句吧...