shell启动脚本给C程序传参

深藏阁楼爱情的钟 2022-12-27 08:44 564阅读 0赞
  1. Linux环境下开发C程序,若想要可选择性的给程序传递外部参数,最后是以启动脚本的形式间接进行传递,这样对于命令行的参数解析工作将集中到shell脚本中,大大增加C代码的可移植性。
  2. shell脚本给C程序传参最常用的方法有两种,在执行C程序时使用命令行传参,要求命令行参数的位置固定(在C程序中不加入额外参数标识解析模块情况下),另外一种方法相对灵活,即使用环境变量的方式进行传参。

针对以上方法,举一个简单例子:

  1. #!/bin/sh
  2. ECHO="echo"
  3. FPARG="-p"
  4. FSARG="-s"
  5. FILEPATH="0"
  6. FILESIZE="0"
  7. function printHelp(){
  8. ehco ""
  9. echo "<Archerfoo>My Demo Script"
  10. echo ""
  11. echo "$0 $FPARG 指定文件路径"
  12. echo "$0 $FSARG 指定文件阈值"
  13. echo ""
  14. echo "Usage:"
  15. echo "$0 -p ./test.txt -s 100 "
  16. }
  17. while [ $# -gt 0 ]; do
  18. arg=$1
  19. case "$arg" in
  20. $FPARG
  21. $ECHO "Input file: $2"
  22. FILEPATH=$2;
  23. shift
  24. shift
  25. continue;;
  26. $FSARG
  27. $ECHO "Set size: $2"
  28. export FILESIZE=$2
  29. shift
  30. shift
  31. continue;;
  32. *)
  33. echo "Unknown Argument: $*"
  34. printHelp
  35. exit 1
  36. break;;
  37. esac
  38. done
  39. if [ 0 == $FILEPATH ]
  40. $ECHO "Test default file: test.txt"
  41. ./fileTest
  42. else
  43. $ECHO "Test file: $FILEPATH"
  44. ./fileTest $FILEPATH
  45. fi
  46. $ECHO "Test Succeed !"
  47. 上面的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 命令执行后就不可用了。
  48. int main(int argc, char *argv[])
  49. {
  50. const char *filePath = (argc > 1)? argv[1]: "test.txt";
  51. const char *env_name = "FILESIZE";
  52. char *env_str = getenv(env_name);
  53. double fileSize = 0;
  54. printf("file: %s\n", filePath);
  55. if (NULL == env_str)
  56. fileSize = 100;
  57. else
  58. printf("file size: %f\n", fileSize);
  59. ...
  60. return 0;
  61. }
  62. C程序中的main函数传入命令行参数,通过getenv()函数获取指定的环境变量值。

发表评论

表情:
评论列表 (有 0 条评论,564人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shell脚本函数

    函数可以提高代码复用,在python、java中比较常见。 shell脚本也有函数,可以将一组命令集或语句形成一个可用代码块。 定义格式 函数名(){