zoukankan      html  css  js  c++  java
  • shell脚本中使用其他用户执行脚本

    1,用su,当我们需要以其他身份执行 command,或者shell脚本。一般命令如下:

    a. 切换用户只执行一条命令的可以用:  su - oracle -c your_command
    b. 切换用户执行一个shell文件可以用:su - oracle -s /bin/bash your_shell.sh

    2,在某些软件安装过程中,要创建独立用户,然后以该用户运行某些安装操作,如gitolite安装过程,创建git用户并执行安装

    方法1:sudo -u user ...

    sudo -u git -H  <<-Code
    ls ~
    cat test
    #other cmds
    Code
    后面的相继命令在Code之前的会是以切换后的用户执行。

    方法2: su

    su命令

        #!/bin/sh
        echo ~/
        su - test <<HERE
        echo ~/
        ls -al
        HERE
        echo ~/
    sudo su - user1
    echo #HOME
    echo `ls -ltr`
    

    可以用sudo命令,它的作用是“excute a command as another user",默认为root用户,可以用 -u 指定用户名(假设要以user身份执行prog程序):sudo -u user prog就可以了。

    另一个命令su,是用另一个身份运行shell,再用新的shell运行指定程序(su只能运行在shell终端里面,虽然可以把命令写成类似sudo的样子[su -c user prog],但它的实现原理实际上还是先运行一个shell,再通过shell运行其他程序)。

    http://www.shareup.me/metadocs/11197 

    Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。如下:

    export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
    sqlplus $USERID @$OUT_FILE << EOF
    exit
    EOF

    当把这段代码放在Shell中时,会在Shell脚本执行完毕后自动退出SQLPLUS的命令提示符状态。

    <<EOF
    (内容)
    EOF


    可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。这里再简要回顾一下< <的用法。当s h e l l看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到s h e l l又看到该分界符位于单独的一行)。这个分界符可以是你所定义的任何字符串。提示,最好在行首,不要加空格。

    方法1.需要,自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.

    #!/bin/sh
    mysql -uroot -p123456 <<EOF
    use test;
    select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int 
                                                      # type,only char type need single quote mark.

    exit

    EOF

     

    在shell中:
    $0: 获取当前脚本的名称
    $#: 传递给脚本的参数个数
    $$: shell脚本的进程号
    $1, $2, $3...:脚本程序的参数 

    方法2:用expect脚本

     expect用法:参考 http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html

     开机自启动可以将脚本放到/etc/rc.d目录下的rc.local中即可

  • 相关阅读:
    将centos_yum源更换为阿里云(官方文档)
    JIRA 破解文件研究(Win 7环境)
    告别拖延症,你也可以轻松做到
    VS2015 + EF6连接MYSQL
    start-stop-daemon
    stm32开发板无法正常写入的问题或者写入后无法正常运行的问题
    进制转换
    回文判断程序
    C语言结构体指针的引用问题
    升级/安装主题插件提示权限不足 输入FTP解决办法
  • 原文地址:https://www.cnblogs.com/bigben0123/p/3064843.html
Copyright © 2011-2022 走看看