[英]How to pass run time arguments to a function in c through a shell script
我有一個Shell腳本,該腳本必須從命令行獲取參數並將其傳遞給C語言中的函數。我嘗試搜索但找不到可理解的解決方案。 請幫我。 是否應該在外殼程序腳本中通過選項將參數作為命令傳遞?
我有一個像這樣的主要功能:
int main(int argc, char *argv[])
{
if(argc>1)
{
if(!strcmp(argv[1], "ABC"))
{
}
else if(!strcmp(argv[1], "XYZ"))
{
}
}
}
如何通過外殼程序腳本從命令行傳遞參數ABC / XYZ,外殼程序腳本隨后使用makefile編譯代碼?
您不能用==
來有意義地比較字符串,這是指針相等性測試。 您可以將strcmp用作argc>1 && !strcmp(argv[1], "XYZ")
。 main
的參數具有某些屬性,請參見此處 。
順便說一句, main
的argc
至少為1。因此,測試argc==0
永遠不會成立。 通常argv[0]
是程序名稱。
但是,如果您使用GNU glibc (例如在Linux上),它提供了幾種解析程序參數的方法 。
關於程序參數有約定和習慣 ,您最好遵循它們。 POSIX指定getopt(3) ,但是在GNU系統上, getopt_long
更加方便。
另外要注意, 通配符是由做殼類Unix系統。 參見glob(7) 。
(在Windows上,情況有所不同,某些啟動例程àla crt0可能會解析命令行)
在實踐中,您最好使用一些系統函數來解析程序參數。 一些庫為此提供了一種方法,例如GTK具有gtk_init_with_args
。 否則,如果有,請使用getopt_long
...
作為啟發,還請看一些免費軟件程序的源代碼。 您可以在github或其他地方找到許多此類文件。
如何通過外殼程序腳本從命令行傳遞參數ABC / XYZ
如果將C ++程序編譯為可執行文件 ,例如/some/path/to/yourexecutable
,則只需運行類似以下的命令
/some/path/to/yourexecutable ABC
如果PATH
變量中的目錄/some/path/to/
包含yourexecutable
,則只需運行yourexecutable ABC
。 如何設置PATH
變量(您可以在Unix shell中使用echo $PATH
進行查詢)是一個不同的問題(您可以使用源代碼編輯器(例如GNU emacs
編輯一些shell 啟動文件,也許是$HOME/.bashrc
。 , vim
, gedit
等...;您可以運行一些帶有適當的,以冒號分隔的目錄順序的export PATH=
....命令)。
哪個依次使用makefile來編譯代碼?
然后,您應該查看該Makefile
,您將知道什么是可執行文件。
您正在使用Linux並在Linux上進行編碼,因此,您應該閱讀有關Linux編程的知識(例如ALP或更新的知識;另請參見intro(2)和syscalls(2) ...),並且需要了解有關操作系統的更多信息(因此請閱讀《 操作系統:三篇簡單的文章》 。
請參閱以下簡單示例:
$ cat foo.c
#include <stdio.h>
int main(int argc, char ** argv)
{
int i;
for (i = 0; i < argc; ++i) {
printf("[%d] %s\n", i, argv[i]);
}
return 0;
}
$ gcc foo.c
$ ./a.out foo bar
[0] ./a.out
[1] foo
[2] bar
$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.