Shell输入为变量

时间:2012-10-29 13:12:27

标签: c++ input parameters

我目前有一个c ++ Linux程序,它从文件中读取参数“P”并将其加载到RAM中以进行进一步操作。该文件包含以下行:

P = 123

我希望程序从shell输入而不是文件中获取P.我对所有选项都持开放态度,只要我在SSH中连接时可以手动输入P. 我想到的是输入提示:

sudo myprogram start
enter P value : (I would manually enter "123" here)

或者可能是一个论点:

sudo myprogram start 123

这一定很简单,但我不知道怎么做,所以非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

如果这是该文件唯一的数据,则文件操作是不必要的。 只需将123(或其他)传递给您的C ++程序并将字符串转换为整数。

假设您将整数作为第二个参数传递:

int  p = atoi(argv[2]);

更好的选择是使用strtol:

char *s, *ptr;

s = argv[1];
int p = strtol(s, &ptr, 10);

如果您无法更改C ++代码,那么只需执行以下操作:

echo "P = 123" > file && myprogram start 

如果您的文件包含更多内容而您不能简单地执行 echo ,请使用新值替换现有行:

 sed -i "s/P = [0-9]*/P = 123/" file && myprogram start

答案 1 :(得分:0)

第一个版本(从键盘输入):

echo -n "enter P value: "
read P

第二个版本(作为shell脚本参数传递):

P=$1

第三版(学习bash / shell编程):

答案 2 :(得分:0)

这是基本的C ++。请查看下面的示例代码,或访问我从中复制的site

#include <iostream>

// When passing char arrays as parameters they must be pointers
int main(int argc, char* argv[]) {
    if (argc < 5) { // Check the value of argc. If not enough parameters have been passed, inform user and exit.
        std::cout << "Usage is -in <infile> -out <outdir>\n"; // Inform the user of how to use the program
        std::cin.get();
        exit(0);
    } else { // if we got enough parameters...
        char* myFile, myPath, myOutPath;
        std::cout << argv[0];
        for (int i = 1; i < argc; i++) { /* We will iterate over argv[] to get the parameters stored inside.
                                          * Note that we're starting on 1 because we don't need to know the 
                                          * path of the program, which is stored in argv[0] */
            if (i + 1 != argc) // Check that we haven't finished parsing already
                if (argv[i] == "-f") {
                    // We know the next argument *should* be the filename:
                    myFile = argv[i + 1];
                } else if (argv[i] == "-p") {
                    myPath = argv[i + 1];
                } else if (argv[i] == "-o") {
                    myOutPath = argv[i + 1];
                } else {
                    std::cout << "Not enough or invalid arguments, please try again.\n";
                    Sleep(2000); 
                    exit(0);
            }
            std::cout << argv[i] << " ";
        }
        //... some more code
        std::cin.get();
        return 0;
    }
}

答案 3 :(得分:0)

您是否只是想在C ++程序中提示输入值? 如果这就是你想要的,这个简单的代码将完成这项工作:

#include <iostream>
int main(int argc, char **argv) {
  int p = 0;
  std::cout << "Enter P value: ";
  std::cin >> p;
  std::cout << "Entered value: " << p << std::endl;
  return 0;
}