一、 一般编写shell需要分3个步骤

1. 新建一个脚本文件,并编写程序

vi hello.sh

#!/bin/bash

#注释

#输出
printf '%s\n' "Hello World!"
echo "Hello World!"

2. 给该文件添加执行权限
chmod +x hello.sh

如果权限不够,可以用管理员权限

sudo chmod +x hello.sh

3. 执行脚本

相对路径,在这个脚本所在的文件下,

./hello.sh

绝对路径,假设我的文件在/home/user/hello.sh

./home/user/hello.sh

可以不给文件加权限(即不要第2步)直接执行,如下命令:

bash hello.sh

sh hello.sh

4. 输出结果如下

Hello World!

Hello World!

二、 计算程序运行时间

1. 首先获取时间

#!/bin/bash
#获取当前时间 yyyy-MM-dd HH:mm:ss 格式
nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
#获取当前日间 HH:mm:ss 格式
nowtime2=`date --date='0 days ago' +%H:%M:%S`
printf '%s\n' "A is: $nowtime"
printf '%s\n' "A is: $nowtime2"

可以参考www.2cto.com/os/201512/455379.html

2. 执行程序

其中sum是我写的c语言程序编译后的文件

#!/bin/bash
#绝对路径
/home/hadoop/zc/c/sum
#相对路径
#./sum

3. 程序运行时间(延时)

Linux shell脚本中的延时

可以使用sleep或usleep函数:

i: sleep:默认为秒

sleep 1s 表示延时1秒

sleep 1m 表示延时1分钟

sleep 1h 表示延时1小时

sleep 1d 表示延时1天

ii: usleep:默认为微秒

1s = 1000ms = 1000000us

#!/bin/bash
#s为单位
#date中有很多控制格式的,其中%s是获取当前时间距离1970-- :: UTC的时间差。
#记录开始时间
start=$(date +%s)
#程序
sleep 5s
#记录结束时间
end=$(date +%s)
#计算时差
time=$(( $end - $start ))
#输出
#echo $time
printf '%s\n' "sleep $time seconds"

4. 程序执行时间(以sum为例)

#!/bin/bash
#s为单位
#date中有很多控制格式的,其中%s是获取当前时间距离1970-- :: UTC的时间差。
#记录开始时间
start=$(date +%s)
#程序
/home/hadoop/zc/c/sum
#记录结束时间
end=$(date +%s)
#计算时差
time=$(( $end - $start ))
#输出
#echo $time
printf '%s\n' "Program Finished in $time seconds"

三、 先后提交两个程序

如果两个程序在一个终端提交,则运行会出现问题。所以两个程序要在多个终端上运行。

linux Shell新建终端,可以参考Ubuntu下自动打开多终端的多个标签并执行不同脚本的方法

#!/bin/bash
#新建终端
gnome-terminal
#新建标签页
#gnome-terminal --tab

但是,新建终端后,两个程序还是在同一个终端上运行,还会出问题。

i: 一个脚本的实现,运行两个程序。(以sum为例,假设sum在/home/user下面)

#!/bin/bash

printf '%s\n' "Hello test!"

gnome-terminal -x bash -c "/home/user/sum;exec bash"

ii: 我用两个脚本做的,第一个脚本是wc.sh,第二个脚本是pi.sh,我们执行第一个脚本,第一个脚本延迟5s后自动调用第二个脚本如下:

#!/bin/bash
printf '%s\n' "Hello WC!"
#休眠5s
sleep 5s
#
#./pi.sh
gnome-terminal -x bash -c "bash ./pi.sh;exec bash"
#或者
#gnome-terminal -x bash -c "./pi.sh;exec bash"
#!/bin/bash
#新建终端
#gnome-terminal -x bash -c "ls; exec bash" printf '%s\n' "Hello Pi!"

最后效果是先打印出Hello WC! ,然后等5秒,创建一个新终端,并调用pi.sh ,这时开始执行pi.sh,结果是打印Hello Pi!

关于怎样在新的终端调用程序,可以参考gnome-terminal技巧

四、 linux 下如何通过ssh到其他机器然后执行命令

这里ssh免密钥连接就不讲了。

如果我连到另一台机器上只是执行一个命令可以这样写:

ssh hostname@IP  cd /opt/    #其中 hostname是你要连接机器的用户名,IP是其对应的IP地址

如果我连到另一台机器上执行多于一个命令可以这样写:

ssh hostname@IP "cd /opt/;pwd"    #注意:当多于两个命令时,一定要把所有命令以分号的方式写在双引号里面。

Linux编写Shell脚本入门的更多相关文章

  1. linux的shell脚本入门

    Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...

  2. Linux编写Shell脚本

    ——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...

  3. linux脚本错误: line *: [: missing `]',linux编写shell脚本时的注意点

    转载:https://www.cnblogs.com/bovenson/p/4548079.html 关于shell的一些注意点,粘贴自拉钩教育精选评论:测试开发核心技术 46 讲-->第6讲 ...

  4. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  5. Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1

    linux空设备文件和重定向 输出/输入重导向 >      >>   <   <<   :>   &>   2&>   2< ...

  6. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  7. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  8. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  9. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

随机推荐

  1. PHP工作模型与运行机制

    PHP的工作模型非常特殊.从某种程度上说,PHP和ASP.ASP.NET.JSP/Servlet等流行的Web技术,有着本质上的区别.   以Java为例,Java在Web应用领域,有两种技术:Jav ...

  2. Springmvc返回信息乱码解决

    恩...基本上所有的配置信息都弄上了,但是还是乱码,最后在方法上面添加了下面的参数,就完美解决了: @RequestMapping(value="/action.action",m ...

  3. vue 生命周期钩子

    每个vue实例被创建时都会经历一系列初始化的过程,像是一个生命从无到有的过程,所以叫生命周期,而这个过程都有对应的不同阶段,也就对应了生命周期不同的钩子函数,这些生命周期函数,作为vue实例的属性使用 ...

  4. JavaScript中批量设置Css样式

    设置 input 元素的  属性: document.getElementsByTagName("INPUT")[0].setAttribute("属性",&q ...

  5. disabled和readonly

    项目中,有一个input控件,input的值需要通过点击一个javascript链接,从弹出的对话框中所列出的项中选择.而不能从input框中直接输入. 刚开始将input的disabled属性设置为 ...

  6. 解决火狐访问(localhost)本地网站提示输入用户名密码

    VS在调试程序时浏览器一直提示要输入用户名及密码,但是我程序根本没有登录界面,最后终于找到了解决方案,如下: 1.在火狐浏览器地址栏中输入:about:config 2.然后在搜索文本框中输入:NTL ...

  7. EasyDarwin开源流媒体社区视频教程

    EasyDarwin开源社区出视频教程了,经过几个深夜的努力,终于将第一次课程的5个课时的视频教程录好<EasyDarwin开源流媒体服务器:编译.配置.部署>,EasyDarwin后面会 ...

  8. 九度OJ 1106:数字之和 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2505 解决:1706 题目描述: 对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和. 输入: 每行输入 ...

  9. Mongoose学习(2)

    1.Schema的扩展 UserSchema.methods.findUserName = function(cb){ return this.model('user').find({username ...

  10. GNU linux 中makefile那点事

    转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...