精华内容
参与话题
问答
  • -bash-3.2$ more gene.sh sqlplus '/ as sysdba'<set pagesize 200 heading off feedback offspool /oracle/test.shs...

    -bash-3.2$ more gene.sh
    sqlplus  '/ as sysdba'<set pagesize 200 heading off  feedback off
    spool /oracle/test.sh
    select 'sudo -u root /usr/sbin/lvdisplay '||file_name||'|'||'grep '||''''||'LV Size'||''''||'|'||'awk {'||''''||'print '||'$'||'3'||
    ''''||'}' from dba_data_files where autoextensible='NO';
    spool off
    exit
    EOF
    more test.sh|sed '/^$/d'|sed '/SQL>/d'|sed '/auto/d'>test1.sh&&mv test1.sh test.sh
    chmod u+x test.sh
    . ./test.sh>rawsize.sql

     

    小结:1, $要用''括起来,否则报错

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-764842/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/9240380/viewspace-764842/

    展开全文
  • 主要介绍了使用python执行shell脚本动态传参 及subprocess的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subprocess这个模块可以非常方便的启动一个子进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, s...

    最近工作需求中 有遇到这个情况  在web端获取配置文件内容 及 往shell 脚本中动态传入参数

    执行shell脚本这个有多种方法   最后还是选择了subprocess这个python标准库

     subprocess这个模块可以非常方便的启动一个子进程,并且控制其输入和输出

    Class Popen(args,bufsize = 0,executable=None,
                stdin =None,stdout =None,stderr =None,
                preexec_fn = None,close_fds = False,shell = False,
                cwd = None,env = None,universal_newlines = False,
                startupinfo = None,creationflags = 0):
    参数是:
    args 应该是一个字符串,或一系列程序参数。要执行的程序通常是args序列或字符串中的第一项,但可以使用可执行参数进行显式设置。
    在UNIX上,与shell=False(默认):在这种情况下,POPEN 类使用os.execvp()来执行子程序。 args通常应该是一个序列。一个字符串将被视为一个字符串作为唯一项目(要执行的程序)的序列。

    在UNIX上,使用shell = True:如果args是一个字符串,则它指定要通过shell执行的命令字符串。如果args是一个序列,则第一个项目指定命令字符串,并且任何其他项目将被视为附加的shell参数。

    可以先创建一个简单的shell脚本  a.sh

    $1 $2 分别代表传进脚本的 第一个和第二个参数


    如果不写shell=True,默认为shell=False,需要在args的第一个参数指定执行器路径

     

     

    bufsize  如果给出,bufsize与内建的open()函数的相应参数具有相同的含义:0表示无缓冲,1表示行缓冲,任何其他正值意味着使用(大约)该大小的缓冲区。负bufsize意味着使用系统默认值,通常意味着完全缓冲。bufsize的默认值是0(无缓冲)。


    stdin,stdout和stderr分别指定执行的程序的标准输入,标准输出和标准错误文件句柄。有效值是PIPE,现有文件描述符(正整数),现有文件对象和 None。 PIPE表示应该创建一个新的管道给孩子。随着无,则不会发生重定向; 孩子的文件句柄将从父类继承。另外,stderr 可以是STDOUT,它表示应用程序的stderr数据应该被捕获到与stdout相同的文件句柄中。
    在Popen对象中,可以设值subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程的标准输出


    preexec_fn 如果将preexec_fn设置为可调用对象,则该对象将在子进程执行前被调用。


    如果close_fds为true,则在执行子进程之前,将关闭除0,1和2之外的所有文件描述符。


    如果shell为true,则指定的命令将通过shell执行。


    如果cwd不是None,那么在执行子代之前,当前目录将更改为cwd。


    如果env不是None,它将为新进程定义环境变量。


    如果设置universal_newlines为true,则文件对象stdout和stderr将作为文本文件打开,但可能会有\ n,Unix行尾约定\ r,Macintosh约定或\ r \ n中的任何行终止, Windows约定。所有这些外部表示被Python程序视为\ n。注意:此功能仅在Python是使用通用换行支持(默认)构建时才可用。此外,文件对象stdout,stdin和stderr的newlines属性不会被communications()方法更新。


    如果设置了STARTUPINFO和creationflags,将被传递到下层的CreateProcess()函数。他们可以指定诸如主窗口的外观和新过程的优先级等内容。(仅限Windows)

     

    Popen对象的一些方法

    Popen.poll()  检查子进程是否终止,返回对象的returncode

    Popen.wait() 等待子进程完成,阻塞。返回returncode

    Popen.communicate(input=None) 将信息输入到进程,从stdout和stderr中读取数据,直到达到文件结尾。等待进程终止。可选的stdin参数应该是要发送到子进程的字符串,如果没有数据应发送给子进程,则为None。

    返回一个元组(stdout,stderr) 但是读取的数据缓存在内存中,所以如果数据量很大或者无限,就不要使用这种方法

    Popen.pid 返回子进程的pid

    Popen.returncode 读取进程的状态码    None —— 子进程尚未结束;
                                                                   ==0 —— 子进程正常退出;
                                                                > 0—— 子进程异常退出,returncode对应于出错码;

                                                                < 0—— 子进程被信号杀掉了。

    Popen.kill() 杀死进程


    ---------------------
    作者:风中孤狐
    来源:CSDN
    原文:https://blog.csdn.net/qq_39904356/article/details/79777715
    版权声明:本文为博主原创文章,转载请附上博文链接!

    转载于:https://www.cnblogs.com/xuzijie/p/9843369.html

    展开全文
  • eval让shell脚本动态的构建命令

    千次阅读 2015-01-31 17:46:08
    eval命令的存在是为了取代一般命令行替换与执行顺序,让shell脚本可以动态的构建命令,这个功能很好用,但得小心使用。[P190] 工作原理及用法 用法:eval command-line 原理:eval主要用在对参数的特殊处理上面...

    简单来说eval对程序语言来说是如虎添翼[《shell脚本学习指南》09年4月第一版,P199]
    eval命令的存在是为了取代一般命令行替换与执行顺序,让shell脚本可以动态的构建命令,这个功能很好用,但得小心使用。[P190]

    工作原理及用法
    用法:eval command-line
    原理:eval主要用在对参数的特殊处理上面的,一般的命令行,shell处理参数就只执行一遍,像转义和变量转变;但加上eval后就可以对参数多进行一遍处理;
    一个eval只能使shell对参数多一次处理,因此有几个eval就可以多加几次,即eval eval command-line 这样就能对参数进行三次编译,但此时应特别注意参数的转义,下面有例子说明。
     
     
    eval命令会计算(evalue)它的参数,这些参数作为表达式计算后重新组合为一个字符串,然后作为一个命令被执行。
    eval最常见的用法是将动态生成的命令行计算并执行。

    1. eval command-line
    其中command-line是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。如:
    pipe="|"
    eval ls $pipe wc -l
    shell第1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。
    如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval。命令行结束符(; | &),I/o重定向符(< >)和引号就属于对shell具有特殊意义的符号,必须直接出现在命令行中。
     
    2. eval echo \$$# 取得最后一个参数
    如:cat last
    eval echo \$$#
    ./last one two three four
    four
    第一遍扫描后,shell把反斜杠去掉了。当shell再次扫描该行时,它替换了$4的值,并执行echo命令
     
    3.以下示意如何用eval命令创建指向变量的“指针”:
    x=100
    ptrx=x
    eval echo \$$ptrx 指向ptrx,用这里的方法可以理解b中的例子
    100 打印100
    eval $ptrx=50 将50存到ptrx指向的变量中。
    echo $x
    50 打印50

    附eval用法三例(网络收集):
     
    例一:
     
    #寻找合符条件的变量名,然后将该变量的值赋予另一变量
    v1=aaa
    v2=bbb
    c=1
    if [ $c -eq 1 ]
    then
    vname=v$c #找到符合条件的变量名为v1
    eval vvv="$"$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,即,使vvv=aaa
    eval vvv='$'$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,即,使vvv=aaa
    #eval vvv=$$vname ; echo vvv: $vvv #错误用法
    fi
     
     
    #例二:
     
    #以变量v1的值aaa作为变量名,将变量vaaa的值赋予这一新定义的变量aaa
    v1=aaa ; vaaa="This is aaa"
    #eval $v1=$vaaa ; echo aaa: $aaa #错误用法
    #eval $v1="$vaaa" ; echo aaa: $aaa #错误用法
    eval $v1='$vaaa' ; echo aaa: $aaa
     
     
    #例三:
     
    #以变量v1的值aaa作为变量名,并将变量名字串作为值赋予自身
    v1=aaa ; vaaa="This is aaa"
    eval $v1=$v1 ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的
    eval $v1="$v1" ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的
    eval $v1='$v1' ; echo aaa: $aaa

    展开全文
  • 动态执行shell脚本

    2019-12-12 19:01:21
    #!/bin/bash #su - $1 -s /bin/bash /app/CodeQualityScan/gblfy_cx/sonar-scanner.sh su - $1 <<EOF cd $2; ./sonar-scanner.sh exit; EOF

    一、linux动态执行指定脚本

    1. 脚本目录 /app/CodeQualityScan/gblfy_cx/
    2. 脚本名 sonar-scanner.sh
    3. 用户gblfy_cx

    二、需求思路分析

    ①我要做什么?

    用户gblfy_cx进入/app/CodeQualityScan/gblfy_cx/脚本目录执行sonar-scanner.sh

    ②先手动执行一遍流程

    执行步骤 说明
    先用root用户登录
    切换用户到gblfy_cx
    到指定目录
    执行指定脚本
    查看日志

    ③ 把执行命令记录下来

    把手动执行的每一条命令,都记录下来,剩下的就是怎样写一个脚本,让脚本依次执行我们的命令即可

    步骤 需求 执行命令
    切换用户到gblfy_cx su - gblfy_cx
    到指定目录 cd /app/CodeQualityScan/gblfy_cx/
    执行指定脚本 ./sonar-scanner.sh

    三、动态执行脚本

    ①手动制作脚本

    执行步骤 说明 执行命令
    新建一个脚本DynamicStartSonarShell.sh vim DynamicStartSonarShell.sh
    给此文件赋予可执行权限gblfy_cx chmod u+x DynamicStartSonarShell.sh
    执行指定脚本 ./DynamicStartSonarShell.sh

    脚本内容:

    #!/bin/bash
    #su - $1 -s /bin/bash /app/CodeQualityScan/gblfy_cx/sonar-scanner.sh
    su -gblfy_cx <<EOF
    cd  /bin/bash /app/CodeQualityScan/gblfy_cx/;
    ./sonar-scanner.sh
    exit;
    EOF
    

    ②脚本升级

    #格式:sh 脚本名 用户用 目录
    sh DynamicStartSonarShell.sh gblfy_cx  /bin/bash /app/CodeQualityScan/gblfy_cx/
    注:只有root才可以,root切换到任何一个用户不需要输入密码,但,其他用户切换root用户或者其他用户都需要密码
    

    脚本内容:

    #!/bin/bash
    #su - $1 -s /bin/bash /app/CodeQualityScan/gblfy_cx/sonar-scanner.sh
    su - $1 <<EOF
    cd $2;
    ./sonar-scanner.sh
    exit;
    EOF
    

    ③ 脚本截图

    在这里插入图片描述

    展开全文
  • Linux中执行shell脚本的5种方法总结

    万次阅读 2019-04-01 15:17:54
    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码代码如下: cd /data/shell ./hello.sh ./的意思...
  • shell脚本快速执行命令

    千次阅读 2019-03-24 11:26:02
    shell脚本快速执行命令1.gnome-terminal2.基本用法3.启动后自动执行命令4.demo15.demo2 1.gnome-terminal 常用,置顶: gnome-terminal -x bash -c "子终端要执行命令1;2;...." gnome-terminal -t "title-name" -x...
  • 原文地址:https://blog.csdn.net/timchen525/article/details/76407735Shell 脚本执行方式通常有如下三种:(1)bash script-name 或者 sh script-name;(2)path/script-name或者./script-name;(3)source ...
  • 分享知识 传递快乐 JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11...Jsch 使用shell执行命令,有两种方法: ChannelExec channelExe...
  • Linux 中执行Shell 脚本的方式(三种方法)

    万次阅读 多人点赞 2017-07-30 21:47:25
    Linux中Shell脚本执行(三种方法)
  • android应用程序执行shell脚本命令

    千次阅读 2014-06-16 15:51:24
    急问android应用程序如何执行shell脚本命令 跪求大神指点~! 小菜在做一个android应用程序,需要执行系统调用命令,然后我考虑将命令写在.sh脚本里,直接调用脚本执行。 但是调用一直不成功。 我具体用到了如下...
  • java调用shell脚本、windows命令

    千次阅读 2017-05-12 20:47:25
    package com.autotest.util; import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.log4j.Logger;...public class ShellUtil { ... private static Logger logger = Logger.getLogg
  • shell脚本执行命令Shell is a command-line interpreter that allows the user to interact with the system. It is responsible for taking inputs from the user and displaying the output. Shell是一个命令行...
  • Linux中执行shell脚本的4种方法总结

    万次阅读 2016-09-19 22:21:51
    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下bash shell脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文件...
  • Windows下执行shell脚本

    千次阅读 2019-09-03 18:52:18
    1、在windows下想要执行shell脚本,需要使用到"Git Bash",所以我们需要先安装Git。 2、添加环境变量:C:\Program Files\Git\cmd 3、打开"Git Bash",运行脚本 三种方式运行: (1)./test.sh (2)sh test.sh...
  • 摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发。 java开发的特点就是我们可以很早地进行TDDL, METAQ 等等地对接; 而脚本...
  • Mac终端 运行shell脚本

    千次阅读 2019-09-20 11:35:06
    文件所在位置如:/Downloads/test.sh 方法一: ...2、输入命令 ./test.sh ; 方法二: 直接将.sh文件拖入终端; 方法三: 命令行输入.sh文件完整路径:/Users/用户名/Downloads/config.sh ...
  • expect调用shell命令shell脚本

    千次阅读 2017-09-19 21:51:59
    expect调用shell命令 获取本机IP: set idcid [exec sh -c {ifconfig eth0 | grep Mask | cut -d: -f2 |...调用shell脚本test.sh set testResult [exec sh -c {./test.sh}]   参考资料:https://www.linu...
  • arr=("suxinghe" "tianshantonglao" ) #arr=("dongfangbubai") for mm in ${arr[@]} do #scp /opt/cloudera.tar bigdata@$mm:/home/bigdata/ echo $mm############# #:<<...ssh -Tq bigdata@$mm <...
  • shell脚本命令运行

    千次阅读 2019-03-25 08:44:25
    终端读取数据表头 head -1 /mnt/daytime.csv 写sh脚本读取表头 [root@nhost21 mnt]# more zz.sh #!/bin/bash MM=`head -1 /mnt/daytime.csv` ...运行sh脚本,得到结果 [jhadmin@nhost21 mnt]$ source zz.sh : ...
  • Linux中C语言执行shell脚本的方法

    千次阅读 2019-01-02 20:23:48
    主要是exec函数簇和system函数,其中需要注意的是,exec函数簇的函数执行成功后是无返回的,一般需要和fork()函数同时使用。在使用时需要另外的fork一个进程。 exec函数簇: 函数原型: #include &lt;unistd...
  • python执行shell脚本的几种方法

    万次阅读 2019-11-05 09:27:35
    前言:Python作为一门脚本语言,有时候需要与shell命令交互式使用,在Python中提供了很多的方法可以调用执行shell脚本,本文做一个简单的总结。本文的开发环境是Ubuntu16.04. 一、os.system(“command”) 这是...
  • Java执行shell脚本文件完整代码

    万次阅读 2018-08-30 20:29:03
    最近要下线一台历史遗留的物理机,在整理该机的crontab任务时,发现有不少纯shell脚本形式的定时任务,决定使用Java写一个执行shell脚本文件的通用工具类。 二、实现方式 Java执行shell脚本文件共有两种方式,两...
  • 在本地shell脚本中ssh到远程服务器并执行命令

    万次阅读 多人点赞 2018-11-23 13:42:11
     经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了。一下介绍两种shell命令远程执行的方法。 前提条件:  配置ssh免密码登陆 对于简单的...
  • 让Android系统或Android应用执行shell脚本,方法一是:通过修改/system/init/init.c,在里面写入执行脚本的命令。方法二是:启动一个服务,让这个服务去执行脚本。
  • Windows下运行shell脚本

    万次阅读 2018-04-25 16:27:55
    1.安装 git2.cmd中进入git所在目录的bin文件夹下3.输入sh .\test.sh成功。
  • Hadoop执行shell脚本

    千次阅读 2012-07-17 16:46:05
    分享个自己的hadoop 执行shell脚本, 不过对于会写shell脚本的人估计用不到, 对于不会写shell脚本的人似乎又看不懂。 如果有兴趣学习的话可以私下联系。至于 脚本中涉及的相关文件(源码/compile.sh),未能...
  • Windows下怎么执行shell脚本

    千次阅读 2019-06-15 10:16:00
    1、在windows下想要执行shell脚本,需要使用到"Git Bash",所以我们需要先安装Git。 2、查看Git环境变量是否配置,没有配置需要配置(我这里安装Git时自动配置了) 3、随意目录,打开"Git Bash"窗口,创建一个...
  • ansible执行shell脚本

    万次阅读 2018-04-08 22:46:25
    编写脚本:pb_shell.sh wfq@ubuntu:~/playbook$ cat pb_shell.sh #!bin/sh echo "today(`date`) is a nice day, since I do some nice demo about ansible and excute very well." &gt; /home/wfq/...
  • Makefile中执行shell脚本

    万次阅读 2016-08-22 09:40:04
    在之前一次编写makfile时候,有看到相关的makefile中使用$$来引用变量,而且尝试后发现$$使用居然和${}有类似的功能。当时也没具体追究相关的用法,当然刚才所说的都是错误的观念 $$:在makefile中会被替换成一...

空空如也

1 2 3 4 5 ... 20
收藏数 369,085
精华内容 147,634
关键字:

动态执行shell脚本