精华内容
下载资源
问答
  • linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码一个脚本示例。 ...

    linux执行sh脚本文件命令

    很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本示例。

    编写脚本

    touch updateapp.sh
    vim updateapp.sh
    #切换目录
    cd /home/ubuntu/mobile
    #更新代码
    git pull origin master
    #重启apache服务
    sudo service apache2 restart

    执行脚本

    管理员身份

    sudo su 
    yourpassword

    执行命令

    ./updateapp.sh

    Note:
    赋予脚本读写执行权限,直接这样是不好的大家不要模仿

    chmod 777 updateapp.sh

    putty的快捷执行

    新建一个putty的快捷方式,然后修改属性,之后哦双击就能免登陆进入系统
    E:\ChromeDown\putty.exe -pw mypassword user_name@123.207.88.150
    213419-20160706221911249-170716372.png

    展开全文
  • 在实际工作中,我们运行命令脚本或程序时,这些命令脚本或程序都需要从终端输入某些继续运行指令,而这些输入都需要人为手工进行。而利用expect,则可以根据程序提示,模拟标准输入提供给程序,从而实现...

    expect是什么

    expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。

    在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!

    在使用expect时,基本上都是和以下四个命令打交道:

    send 用于向进程发送字符串
    expect 从进程接收字符串
    spawn 启动新的进程
    interact 允许用户交互

    • send命令接收一个字符串参数,并将该参数发送到进程。
    • expect命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。
    • spawn命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。
    • interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

    声明expect脚本

    查看expect脚本的路径,然后在expect脚本文件第一行声明,类似bash脚本
    在这里插入图片描述

    #!/usr/bin/expect
    

    自动ssh登录demo

    #!/usr/tcl/bin/expect
    
    set timeout 30	#设置超时时间
    set host "101.200.241.109"	#设置变量
    set username "root"			#设置变量
    set password "123456"		#设置变量
    
    spawn ssh $username@$host	#给ssh运行进程加个壳,用来传递交互指令
    expect "*password*" {send "$password\r"}	#期待上一行命令返回的结果中包含password字符串,*类似redis中keys寻找key,匹配任务数量的任意字符
    interact					#没有这一句登录完成后会退出,而不是留在远程终端上
    

    脚本中的各项参数解释

    • set timeout 30
      设置超时时间,单位为秒,默认情况下是10秒
    • set host "101.200.241.109"
      设置变量
    • spawn ssh $username@$host
      是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。它主要的功能是给ssh运行进程加个壳,用来传递交互指令
    • expect "*password*" {send "$password\r"}
      这里的expect也是expect的一个内部命令,这个命令的意思是判断上次输出结果里是否包含“password”的字符串,如果有则立即返回否则就等待一段时间后返回这里等待时长就是前面设置的30秒,这里这个expect看起来似乎是支持正则的,其实就是期待上一行命令的返回结果是不是预期的,是预期的时候才执行下一步;然后后面跟着的 {send "$password\r"}意味着,上一行命令返回包含password的字符串的时候,去执行.类似if.最后有一个\r不要忘记了,意味的命令输入完之后的回车.
    • interact
      执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上

    expect脚本传参demo

    #!/usr/bin/expect
    
    if {$argc < 3} {
        puts "Usage:cmd <host> <username> <password>"
        exit 1
    }
    
    set timeout -1
    set host [lindex $argv 0] 
    set username [lindex $argv 1]
    set password [lindex $argv 2]
    
    spawn ssh $username@$host
    expect "*password*" {send "$password\r"}
    interact
    

    脚本中的参数解释
    expect中,$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

    但是expect中发送执行脚本命令给远端服务器的时候会发现,被执行的脚本中的相对路径会报不存在.需要改成绝对路径(全路径).这个时候就需要在远端服务器上ssh执行代码块了

    expect参考了大佬的文章
    https://www.jianshu.com/p/bbe9949e2562

    ssh在远端服务器上执行脚本或者shell命令代码块

    前提需要配置ssh免密登录,这个可以参考我另一篇博文
    https://blog.csdn.net/weixin_43944305/article/details/103288482

    如果是简单执行几个命令,则:

    ssh user@remoteIp "cd /home ; ls;"
    

    几个注意的点:

    • 双引号,必须有。如果不加双引号,第二个ls命令在本地执行
    • 分号,两个命令之间用分号隔开

    如果要执行的命令比较多,可能一行写不下,这个事就可以使用<<来达到执行代码块的目的了

    sh脚本执行代码块或者执行远程服务器上的脚本demo

    • 事先最好使用ssh公私钥实现免密ssh登录,具体可以参考我另一篇文章https://blog.csdn.net/weixin_43944305/article/details/103288482
    • 执行的命令在<< gggg之间,这个gg可以自定义
    • > /dev/null 2>&1重定向目的在于不显示远程的输出了,/dev/null 这个设备,是linux中黑洞设备,什么信息只要输出给这个设备,都会给吃掉;2>&1代表将错误输出2绑定给正确输出1,然后将正确输出发送给 /dev/null设备
    • 在结束前,加exit退出远程节点
    #!/bin/bash
    ssh user@remoteNode > /dev/null 2>&1 << gg
    cd /home
    touch abcdefg.txt
    ./xxx.sh &	#有运行权限的话直接执行; '&'类似nohup的'&'使脚本在后台自动运行
    exit
    gg
    echo done!
    
    展开全文
  • sh+脚本名称,可以不必事先设定shell的执行权限。因为这个是将test.sh作为参数传给sh(bash)命令执行的。这时不是test.sh自己来执行,而是被人家调用执行,所以不要执行权限。 [root@iz2ze720onwdpm0gqiky35z 51...

    sh+脚本名称,可以不必事先设定shell的执行权限。因为这个是将test.sh作为参数传给sh(bash)命令来执行的。这时不是test.sh自己来执行,而是被人家调用执行,所以不要执行权限。

    [root@iz2ze720onwdpm0gqiky35z 51mn]# ls -lrt test.sh 
    -r--r--r-- 1 root root 22 Oct 14 22:34 test.sh
    [root@iz2ze720onwdpm0gqiky35z 51mn]# sh test.sh 
    hello world

    如果直接运行test.sh,就会报权限问题

    [root@iz2ze720onwdpm0gqiky35z 51mn]# ./test.sh 
    -bash: ./test.sh: Permission denied
    展开全文
  • 问题: 有很多方式可以执行脚本, 1)。source test.bsh 2)。...source命令的作用是读取并执行test.bsh中的命令; 该命令经常用点命令“.”来替代。 就是说, source test.bsh 与 . test.bsh ...

    问题:

    有很多方式可以执行脚本,

    1)。source test.bsh

    2)。. test.bsh

    3)。chmod a+x test.bsh;./test.bsh

    4)。sh test.bsh

    它们之间的差别是什么?

    解决办法:

    1. source命令的作用是读取并执行test.bsh中的命令;

    该命令经常用点命令“.”来替代。

    就是说,

    source test.bsh

    . test.bsh

    的作用完全相同。

    1. 用脚本文件名本身执行(如果shell脚本具有可执行权限)和用sh命令执行脚本的作用完全相同。

    2. 用source命令执行脚本文件和用sh执行脚本文件的区别:

    用source执行脚本文件,执行过程不另开进程,脚本文件中设定的变量在当前shell中可以看到;

    用sh执行脚本文件,是在当前进程另开子进程来执行脚本命令,脚本文件中设定的变量在当前shell中不能看到。

    比如:

    test.bsh的内容如下:

    #!/bin/bash
    echo $$
    tstvar=12345
    

    以下是上面四种不同方式执行结果的差异:

    dingq@wd-u1110:~/wrk/tmp$ echo $$
    2375
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;source tst_sh.bsh;echo $tstvar
    2375
    12345
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;. tst_sh.bsh;echo $tstvar
    2375
    12345
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;./tst_sh.bsh;echo $tstvar
    5960
     
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;sh tst_sh.bsh;echo $tst_var
    5966
     
    dingq@wd-u1110:~/wrk/tmp$
    

    可以看到,当前进程ID为2375,用source和点命令(.)执行脚本时不改变当前进程,并且脚本中的变量可以看到;

    而直接执行脚本文件和使用sh执行脚本时改变了当前进程,并且脚本中的变量不能看到;

    问题解决。


    作者:david_xtd
    来源:CSDN
    原文:https://blog.csdn.net/david_xtd/article/details/8012627

    展开全文
  • linux双击执行sh脚本

    2021-03-31 19:07:07
    文章目录linux双击执行sh脚本1、在桌面上新建一个Auto.sh脚本文件2、打开终端在桌面目录下执行以下命令进行权限设置:3、设置Terminal启动命令4、双击启动程序开机自启程序1、在home搜索:start,如下图所示:2、...
  • 执行脚本的的时候控制台显示如图所示 可执行命令 chmod +x ./scripts/deploy-beta.sh =>你所执行的脚本命令 回车 然后在直接执行脚本命令即可
  • 问题:有很多方式可以执行脚本,1)。source test.bsh2)。. test.bsh3)。... source命令的作用是读取并执行test.bsh中的命令;该命令经常用点命令“.”来替代。就是说,# sourcetest.bsh与# . test.b...
  • 公司远程N台机器需要执行同一脚本,确认脚本对所有需要执行的机器都有效安全,可以使用如下命令。 ch_sudo.sh为需要执行的脚本名称 ssh root@服务器IP地址 "bash" < ch_sudo.sh 如果机器很多,...
  • 执行sh脚本export对终端无效

    千次阅读 2013-11-23 16:15:34
    当在一个终端shell中执行一个sh脚本,本质是创建一个子进程来执行sh脚本的命令,当执行export时,变量加入子进程的环境变量(而非父进程shell). 当脚本执行结束,子进程销毁. 返回父进程,父进程的环境变量没有任何变化....
  • 一、问题描述 环境:Ubuntu16.04 运行sh脚本出错,提示 command not...故执行sh脚本时指定工作目录即可正常执行,如下所示 ./hello.sh 执行结果如图所示 另外,还要注意给sh脚本执行权限,如 chmod +x hello.sh ...
  • 1、新建名为my.sh脚本文件vim my.sh2、在my.sh中写入要执行的命令,如下:#跳到根目录 cd ~ #查看当前位置 pwd #查看根目录列表信息 ls #查看ip ifconfig #查看ftp状态 service vsftpd status #关闭防火墙 sudo ...
  • 问题: ...有很多方式可以执行脚本, 1)。source test.bsh 2)。. test.bsh 3)。chmod a+x test.bsh;./test.bsh 4)。sh test.bsh 它们之间差别是什么? 解决办法: 1. source命令...
  • 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:此种方法为阿里云推荐 cd /data/shell ./...
  • 利用expect自动执行sh脚本

    千次阅读 2019-05-08 08:36:04
    下面是在centos7 minial环境下测试通过一段sh脚本,利用expect命令,对远端设备自动执行命令 首先要安装expect # yum install expect #cat test.sh #!/bin/bash user=root pass='远端设备口令' ip=$1 /usr/bin...
  • 执行.sh脚本时出现$’\r’: 未找到命令:是因为命令直接从windows 复制过来导致 解决  yum install dos2unix  dos2unix **.sh 进行转换  再次执行即可
  • 以上命令是开启一个新子进程去执行sh脚本。 source ./filename.sh .filename.sh 以上命令是在当前进程来进行运行。 举个栗子: 创建新shell脚本: # 使用vim命令添加shell脚本 vim test.sh # 编写shell...
  • ansible执行脚本常用命令

    千次阅读 2020-05-11 23:38:07
    用法 ...如所有hosts中节点执行脚本build.sh ansible all -i hosts -m script "build.sh" 若只执行其中一个节点,可将all替换会hostname; 顺序执行可添加-f 1 执行shell命令 ansible all -i hosts -
  • .sh脚本文件的执行

    2020-11-29 11:32:20
    .sh脚本文件在执行时,有两种方式。 一是直接在该文件路径下,这时只需要执行# ./file.sh即可 二是不在该脚本文件所在目录下,这时需要加上脚本文件绝对路径,执行命令例如 # ./home/bash/file.sh ...
  • 背景  执行.sh脚本时出现$’\r’: 未找到命令, 原因  是因为命令直接从windows 复制过来导致 解决  运行: yum install dos2unix  dos2unix **.sh 进行转换  再次执行即可
  • 背景  执行.sh脚本时出现$’\r’: 未找到命令, 原因  是因为命令直接从windows 复制过来导致 解决  yum install dos2unix  dos2unix **.sh 进行转换  再次执行即可 ...
  • 是这样,因为要获取最新内容,写了一个.sh脚本放在linux中,只有点击按钮时候(网页发送一个请求,才去拉取新数据) 本来用 ssh2 是可以执行命令,但没执行过脚本,执行报错了,然后我删掉了一些内容,还是...
  • 问题背景: sh脚本文件是在windows系统下编写,然后将sh脚本文件传到Linux服务器上运行。 原因分析: 在windows下编辑脚本,所以有可能有不可见字符。脚本文件是DOS格式,即每一行行尾以\r\n来标识, 其ASCII...
  • 自动化部署脚本文件目录: ...这个命令写在脚本文件里才有作用,他返回这个脚本文件放置目录,并可以根据这个目录来定位所要运行程序相对位置(绝对位置除外)。 Install_log=$SCRIPTPATH/install_log.txtecho...
  • 问题:ubuntu 通过 sh 命令安装 *.sh 程序,报语法错误。 原因:  兼容性问题,因为 ubuntu 将sh默认指向了dash,而不是bash 解决办法:sudo dpkg-reconfigure dash  在弹出窗口选择: 否  然后再重新...
  • 首先在指定目录里新建sh脚本,并在脚本里面编写mysql数据库备份语句,然后使用crontab定时执行,话不多说,直接开始命令 一、编写sh脚本  # cd /usr/local # mkdir scripts # cd ./scripts # vi mysql_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,267
精华内容 2,506
关键字:

执行sh脚本的命令