Linux系统-shell脚本运行程序

序言

现有一个本地发包程序和一个收包程序,需要同时运行,通过脚本实现发收包处理。


在.sh文件中添加可执行文件

  • 在可执行文件目录下新建并编辑.sh脚本文件

    • (1)进入可执行文件目录并新建脚本文件
      • touch test.sh
      • gedit test.sh或vi test.sh
    • (2)添加脚本内容: #!/bin/bash
      • #! 是脚本解释器程序路径。
      • /bin/bash类似的还有bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等
        • /bin/sh(即/bin/dash)是Debian系统下的Dash Shell符号链接,Ubuntu继承了Debian,从6.10版本开始默认使用Dash Shell。
        • /bin/bash和/bin/sh两者大体上没什么区别,/bin/sh更小更简单而且只能使用POSIX标准规定的特性
    • (3)添加可执行文件和标准输入:如 ./send 1234 1235 1236 1237
      • ./send为编译后的可执行文件,1234…为标准输入


执行脚本文件

  • (1)执行单个脚本文件
    • 方法1:本目录下运行
      • 进入脚本文件所在目录
      • ./test.sh执行脚本
      • 或 sh test.sh
      • 或 bash test.sh
      • sh和bash方式不需要实现添加执行权限,test.sh被调用执行
    • 方法2:绝对路径执行
      • /home/username/xx/test.sh
      • 或~/xx/test.sh
    • 方法3:当前shell环境中执行
      • 进入脚本文件所在目录
      • source test.sh
      • 或 . test.sh
    • 注:方法1和2都是在父shell中开启子shell,执行完返回父shell,而方法3则是在当前shell中执行


  • (2)单个脚本文件执行多个命令

    • 每个命令用“ ; ”隔开
      • 各个命令都会执行,互不影响,但不保证每个命令都执行成功
    • 每个命令用“ && ”隔开
      • 前面命令执行成功才去执行后面的命令,保证所有命令执行完毕所有过程都是成功的
    • 每个命令用“||”隔开
      • 前面的命令执行失败才去执行下一条命令,直到执行成功一条命令为止

    注:也可以在终端以“;”、“&&”、“||”方式执行多条命令


  • (3)执行多个独立脚本文件 - 通过gnome-terminal来打开新终端并运行脚本
    • gnome-terminal - -tab “atsc” -x bash -c “sh ./run.sh;exec bash”
    • 注意”“为英文输入下的双引号
    • 命令解释:
      • – -tab:打开新终端(- - window窗口,- -tab标签)
      • “atsc”:新终端名称
      • -x:执行后边命令
      • -c:command
      • sh ./xxx/run.sh:目录下脚本运行
      • exec bash:保持新终端不退出
    • 命令使用:打开多个终端并运行相应脚本实现多个脚本独立运行
      • gnome-terminal - -tab “atsc” -x bash -c “sh ./run.sh;exec bash” ; gnome-terminal - -tab “temp” -x bash -c “sh ./send.sh;exec bash”
        • 使用了“;”,每个命令都执行,互不影响


  • (4)执行多个独立脚本文件 - 通过shell脚本文件启动其他脚本文件

    脚本实现发收包处理

    • 方式1:通过gnome-terminal实现
      • gnome-terminal - -tab “atsc” -x bash -c “sh ./run.sh;exec bash” ; gnome-terminal - -tab “temp” -x bash -c “sh ./send.sh;exec bash”
      • 过程1:先跑了收包程序,允许一定时间的阻塞等待
      • 过程2:再跑发包程序
    • 方式2:通过shell脚步文件启动其他脚本文件
      • 如下图
      • 该写法显得有些冗余,可能有更专业简洁的写法。此处建议使用方法1
#!/bin/bash

echo "-------auto run receiver & sender-------"

for filename in $(ls /xxx/repository)

do
        gnome-terminal --tab "receiving" -x bash -c "sh ./receive.sh;exec bash"
        gnome-terminal --tab "sending" -x bash -c "sh ./send.sh;exec bash;"
        exit
done

exit


补充:路径问题

  • ./ 当前目录

  • ../ 上一级目录

  • / 根目录

  • ~/

    • root账号登录表示/root
    • 用户user账号登录表示/home/user



Acknowledgements:
http://www.cnblogs.com/EasonJim/p/6850319.html
http://blog.csdn.net/alifrank/article/details/47396127
http://blog.csdn.net/bananasssss/article/details/51315342
http://newkedison.tk/blog/tips-for-gnome-terminal.html

2017.07.27

你可能感兴趣的:(Linux系统)