在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 ]; doarg=$1case "$arg" in$FPARG$ECHO "Input file: $2"FILEPATH=$2;shiftshiftcontinue;;$FSARG$ECHO "Set size: $2"export FILESIZE=$2shiftshiftcontinue;;*)echo "Unknown Argument: $*"printHelpexit 1break;;esac
doneif [ 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;elseprintf("file size: %f\n", fileSize);...return 0;
}

在C程序中的main函数传入命令行参数,通过getenv()函数获取指定的环境变量值。

shell脚本的命令行传参相关推荐

  1. Python 命令行传参

    Python 命令行传参 说到 python 命令行传参,可能大部分人的第一反应就是用 argparse.的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非 ...

  2. Linux C程序命令行传参

    在命令行环境下,执行已编译的程序时,将命令行参数以同一行的附加参数的形式传入到要执行的程序中.C编译器允许main()函数没有参数,或者有两个参数(也有可能更多,是对标准的扩展).一般形式为" ...

  3. matlab读取txt数据绘图(python命令行传参)

    (1)命令行实现高斯分布 一:综述 Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Jav ...

  4. python3输入参数_python3 十一、命令行传参

    估计有很多小伙伴在linux系统上或win的doc中遇到没有UI页面的程序,只能通过命令行输入参数的形式去运行 那么python是怎么实现的呢? 熟悉python的小伙伴都知道python有个原生库 ...

  5. Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>

    什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...

  6. 使用shell脚本或命令行添加、删除 crontab 定时任务

    crontab 是运维过程中常用的定时任务执行工具 一般情况下在有新的定时任务要执行时,使用crontab -e ,将打开一个vi编辑界面,配置好后保存退出,但是在自动化运维的过程中往往需要使用she ...

  7. pytest命令行传参

    前言 命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在cmd执行"pytest --html=report.html",这里面的"--html=report ...

  8. Shell脚本函数(函数传参、递归、创建库)

    Shell脚本函数 一.Shell函数 1.Shell函数定义 2.函数的返回值 return echo 二.函数传参 三.函数变量的作用范围 四.递归 1.阶乘 2.递归目录 五.创建库 一.She ...

  9. argparse:Python命令行传参

    诸神缄默不语-个人CSDN博文目录 argparse模块(Python官方文档:argparse - 命令行选项.参数和子命令解析器 - Python 3.10.3 文档),可以用来在用命令行运行Py ...

最新文章

  1. JAVA 多用户商城系统b2b2c-kafka处理超大消息
  2. bzoj 1026: [SCOI2009]windy数 数位DP算法笔记
  3. php 接口测压,PHP API接口测试小工具
  4. 突然明白了如何看待细枝末节
  5. android usb host hid,Android USB Host与HID通讯
  6. 应用实时监控 ARMS 上线用户行为回溯功能
  7. 通过Repository Manager 1.3来管理戴尔驱动程序更新
  8. Bootstrap 状态切换
  9. jenkins发送邮件
  10. iPhone12年简史:手机之王的荣耀与溃败
  11. 边缘计算崛起!施耐德联手华胜天成打造胶囊数据中心,真正端到端交付
  12. 那么多GAN哪个好?谷歌大脑泼来冷水:都和原版差不多 | 论文
  13. (3)评价模型-分析总和
  14. java switchl练习,java switch练习
  15. PHP中的预定义常量、预定义变量、魔术常量
  16. 点云配准(三) 传统点云配准算法概述
  17. 如何才能方便快捷的将qlv格式转换成mp4格式呢
  18. 小学计算机无生试讲教案,小学数学无生试讲教案(9页)-原创力文档
  19. Spss-kmeans聚类实操
  20. 指针,指针变量,指针变量指向的一些理解

热门文章

  1. CVPR2020:点云三维目标跟踪的点对盒网络(P2B)
  2. 数据治理(一):为什么要数据治理
  3. Python:Scrapy Shell
  4. Python:正则表达式re模块
  5. Android 使用 setImageResource 清空图片
  6. Java的类,对象以及字段和方法
  7. CCF CSP 201609-2 火车购票
  8. selenium+Python(鼠标和键盘事件)
  9. Docker 仓库管理
  10. JQuery EasyUI的常用组件