序言
现有一个本地发包程序和一个收包程序,需要同时运行,通过脚本实现发收包处理。
在.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)执行单个脚本文件
- 方法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中执行
- 方法1:本目录下运行
(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”
- 使用了“;”,每个命令都执行,互不影响
- 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
- 方式1:通过gnome-terminal实现
#!/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