精华内容
参与话题
问答
  • 我们通常遇到需要在程序中动态想脚本传递待处理的参数,然后经脚本的输出结果用于程序的下文.这篇博客就是给出一个此类问题的简单解法.希望对以后的程序有帮助.

            这是上一篇博客的增强版.上一篇博客中,将向脚本的输入写死在了脚本中.问题是,我们通常遇到需要在程序中动态想脚本传递待处理的参数,然后经脚本的输出结果用于程序的下文.

           经过一段时间的调研,这个问题被圆满解决了,可能不能说是多么的优化,但是好歹是一种做法.写下来,以飨读者.

          脚本正文如下:(此时脚本名叫做"url.sh")

    #!/bin/bash
    printf $(echo -n $1 | sed 's/\\/\\\\/g;s/\(%\)\([0-9a-fA-F][0-9a-fA-F]\)/\\x\2/g')"\n"
    

    在上面的脚本中,我仅仅传入了一个参数,就是$1.

            然后下面是程序的正文:

    #include <pthread.h>
    #include <iostream>
    #include <string.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/wait.h>
    using namespace std;
    //参数cmdstring :脚本路径
    //参数args         :传递给脚本的参数
    //参数 buf          :保存脚本输出的变量
    //参数 len          :buf的大小
    int mysystem(const char* cmdstring, string args,char* buf, int len)
    {
        int   fd[2];
         pid_t pid;
        int   n, count;
        memset(buf, 0, len);
        if (pipe(fd) < 0)
            return -1;
        if ((pid = fork()) < 0)
            return -1;
        else if (pid > 0)     /* parent process */
        {
            close(fd[1]);     /* close write end */
            count = 0;
            while ((n = read(fd[0], buf + count, len)) > 0 && count > len)
                count += n;
            close(fd[0]);
            if (waitpid(pid, NULL, 0) > 0)
                return -1;
        }
        else    /* child process */
        {
            close(fd[0]);     /* close read end */
            if (fd[1] != STDOUT_FILENO)
            {
                if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
                {
                    return -1;
                }
                close(fd[1]);
            }
            if (execl("/bin/sh", "-c", cmdstring,args.c_str(),(char*)0) == -1)
            {
                cout<<"err"<<endl;
                return -1;
            }
        }
        return 0;
    }
    int main()
    {
        char p[1024];                                                                      
        string test = "http://192.168.190.2/demo.cgi?method=tcp&tid=%E4%BD%A0%E4%BB%AC";    
        mysystem("/Data2Code/tmpTest/url.sh",test,p,1024);
        cout<<p;
        return 0;
    }
                              
    在main函数中,传递给参数test,让这个参数传入脚本,然后该脚本输出保存在p中,用于后续处理(在这个例子中就是简单的输出到控制台).

    展开全文
  • 这边主要介绍常用的两个方法 $1,$2,$3 的方式$1 就是第一个 $2 就是第二个 while [ $# -gt 0 ]; do case $1 in -sql_file_path) echo "$2" shift ;; -start_date) echo ... echo "start_...

    这边主要介绍常用的两个方法

    1. $1,$2,$3 的方式$1 就是第一个 $2 就是第二个
    while [ $# -gt 0 ];
    do
       case $1 in
       -sql_file_path)
    		echo "$2"
           shift
           ;;
       -start_date) echo 
    		if  [  -n "$2" ] ;then
    			echo "start_date is not  null $2 "
    		else
    			echo  `date "+%Y-%m-%d" -d "-1 month -$(($(date +%d)-1)) days"`
    		fi
           shift
           ;;
       -end_date) 
    	   if  [  -n "$2" ] ;then
    			echo "end_date is not null $2"
    		else
    			echo `date "+%Y-%m-%d" -d "-$(date +%d) days"`
    		fi
           shift
           ;;
    	-site_id) 
    	   echo "site_id $2"
           shift
           ;;
       esac
       shift
    done
    
    展开全文
  • 最近在修改公司的一些cron,自己也是第一次接触和学习shell。对于一些零散但是常用的知识点,做一点点的总结。 拿出一个方法说说吧,方法如下: trans_count_statistics() { str=$1 echo "str:$str" shift 1 for...

    最近在修改公司的一些cron,自己也是第一次接触和学习shell。对于一些零散但是常用的知识点,做一点点的总结。

    拿出一个方法说说吧,方法如下:(信息量挺大的,请耐心看下面的说明)

    trans_count_statistics()
    {
      str=$1
      echo "str:$str"
      shift 1
      for par in $@; do
        count_statistics=0
        exec 3<$par
        while read -u3 line
        do
           echo $line |sed -n "s/^${str}//p" | read count_statistics
           let total_statistics+=count_statistics
           echo "count_statistics=$count_statistics"
           echo "total_statistics=$total_statistics"
        done
    
    
      done
    }
    说明:

    1)该方法的参数为:第一个参数为字符串;之后为一个或多个文件

    2)该方法的作用是抓取并统计一个或多个文件中以指定字符串开头的行之后的数字全部相加后的值

    3)在方法中使用$1, $2, $3……来获取第一,第二,第三……个参数

    4)$@ 能获取到所有参数的列表,然后使用 for par in $@;就可以循环处理所有的参数

    5)使用“shift n” 可以跳过前面n个参数,再使用for par in $@;时,就从第n+1个参数开始获取

    6)使用exec 3<$par 将文件重定向到标识为3的文件描述符上

    7)使用while read -u3 line 按行读取文件描述符为3的文件到line中

    8)在sed的命令内容中使用变量,可以用双引号与$结合的形式:sed -n "s/^${str}//p" (有多种方法,我选择了其中的一种而已)

    9)sed是文本编辑命令。sed -n "s/^${str}//p" 的作用是将以${str}开头的行的第一个${str}替换为空字符串,并输出。 -n与 p结合使用表示只输出发生替换的行。 s/是替换命令。^表示匹配以某某开头

    10)let是数值计算命令,之后的变量计算不用再使用$标示。

    这些东西很零碎,但都挺有用也挺好用的。记录下来以后能用到。



    展开全文
  • 如何获取shell脚本的可选参数

    千次阅读 2012-07-28 16:58:10
    直接上例子: cat option_sh #!/bin/bash echo $* # get the optional arguments while getopts f:t: value do case $value in f ) RHOST_INFO=$OPTARG # 从$OPTARG中获得参数值 ;;

    直接上例子:

    cat option_sh 
    #!/bin/bash
    
    echo $*
    # get the optional arguments
    while getopts f:t: value
    do
        case $value in
            f )
                RHOST_INFO=$OPTARG   # 从$OPTARG中获得参数值
                ;;
            t )
                TIMEOUT=$OPTARG
                ;;
        esac
    done
    
    echo $@
    shift $(($OPTIND-1))      # 偏移至后面的参数
    echo $*
    echo $1
    
    if [ $TIMEOUT == "30" ]   # 获得的参数为字符串
    then
    echo here 
    fi
    ngnlinux1 [** NONE **]/home/qius $ 
    ngnlinux1 [** NONE **]/home/qius $ ./option_sh -t 30 -f ss  other paras
    -t 30 -f ss other paras
    -t 30 -f ss other paras
    other paras
    other
    here
    
    使用方法:example.sh -f file_name -t timeoutvalue  other paras

    展开全文
  • shell脚本获取的参数

    2019-09-29 04:49:28
    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 转载于:...
  • Shell 获取参数的方式

    2014-08-17 18:40:00
    那么如何将上面的参数a传到shell程序里面呢。 最常用的是,$0 $1... $10,这些位置变量 其中$0是shell程序的名字,$1,$2...分别为第一个参数,第二个参数... 我们demo.sh 如下所示: $ cat demo.sh #! /bin/...
  • Shell 参数获取的两种方式

    千次阅读 2019-09-25 14:42:24
    echo "shell 名称 = $0" echo "参数1 = $1" echo "参数2 = $2" echo "参数3 = $3" echo "参数4 = $4" echo "参数5 = $5"   执行脚本 : sh test.sh 5 6 3 6 2   输出结果 shell 名称 = test.sh 参数1 = 5...
  • 获取shell第二位以后的所有参数 shell中$@ 可以获取用户传进来的所有参数信息,也可以作为数组使用 使用${数组名:起始索引:长度}可以将数组分片 EXEC_PARAMS=(${@:1})
  • shell脚本之参数获取

    千次阅读 2014-08-24 20:02:13
    在执行shell脚本时可能需要在命令行输入参数
  • 1 脚本编写 ...echo "第一个参数" $1 echo "第二个参数" $2 2 解释  $n 表示是第几个参数 $0 表示脚本命令本身 3 执行效果   转载于:https://www.cnblogs.com/QuestionsZhang/p/10992923.html...
  • getopts可以编写脚本,使控制多个命令行参数更加容易。g e t o p t s用于形成命令行处理标  准形式。原则上讲,脚本应具有确认带有多个选项的命令文件标准格式的能力。    20.2.1 getopts脚本实例  通过例子...
  • VB实现SHELL扩展之接口参数获取失败探析

    千次阅读 热门讨论 2007-08-23 16:52:00
    前几天有位网友问我用VB实现SHELL扩展的问题,这个问题...Shell扩展有多种,而我们目前所关注的就是实现“IShellExecuteHookW ”接口的扩展,这个接口功能很强劲,只要是window加载相应程序,必须要过这一关,这样你就
  • 主要介绍了python执行shell获取硬件参数写入mysql的方法,可实现对服务器硬件信息的读取及写入数据库的功能,非常具有实用价值,需要的朋友可以参考下
  • 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是...
  • ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 1 [root@redhat6 ~]# ./ts.sh para1 para2 2 [root@redhat6 ~]# ./ts.sh para1 para2 para3 ...[root@redhat6 ~]# ./ts.sh p...
  • 获取以一个单字符串显示所有向脚本传递的参数,形如 传入参数 a1,a2, 使用$*输出后展示为a1 a2这样的一个字符串。与位置变量不同,其可展示参数可超过9个 $$ 获取脚本运行的当前进程ID号 $? 获取上一个命令的退出...
  • 问题:对于shell脚本,$0表示脚本... 答案:通过awk的变量定义,把shell脚本的参数值赋值给awk的自定义变量,然后通过变量引用,使用shell传进来的参数  举例:下面的脚本test.sh内容如下,带参数执行脚本:sh tes...
  • Shell获取进程参数

    2019-08-19 07:28:01
    2.Shell中条件语句判断 3.过滤关键信息 觉得举个例子比较好说明: ps -ef | grep 'java'| grep -v grep | awk '{ print $2; }' ps -ef --查询进程 ps -ef | grep 'java' 查询与‘java’相关的进程信息 ...
  • 前一段时间使用 Server 端 Git Hooks 的时候,需要获取 Git 提交的信息,这里对如何获取 Git 传递的参数 进行简单记录总结。 git 通过传递参数或者标准输入流的形式传递提交的信息。 获取参数信息 git hooks 的...
  • Shell获取参数

    2019-09-26 14:21:45
    Shell获取参数 如果只需要传入参数,基本上可以使用$n来取参数,注意n是从1开始的整数 $0 指向的是脚本的名字 $ cat myscript #!/bin/bash echo "First arg: $1" echo "Second arg: $2" $ ./myscript hello world ...
  • 自身生成的程序为VB示例.exe 当其他程序调用时 shell "C:\VB示例.exe 参数1" 自己启动后获取附加的参数"参数1" ?
  • shell脚本中获取指定位置的参数

    千次阅读 2019-06-04 17:43:32
    代码如下: # test.sh echo "${@: 1:1}" echo "${@: 2:1}" echo "${@: 3:1}" echo "${@: $#:1}" echo "${@: $#-1:1}" echo "${@: $#-2:1}" echo "************" echo "${@:1:1}" echo "${@:2:1}" ...echo "...
  • 提供一个shell 脚本用于用户登录,入参为 用户名和密码,由于保密需要,密码必需通过echo 方式传递,不能接在脚本后面当入参。 现在我们在模仿这个登录,设计思路是这样的: 通过echo 传输密码,用户名没有保密...

空空如也

1 2 3 4 5 ... 20
收藏数 1,672
精华内容 668
关键字:

的参数 获取shell