Linux编写Shell脚本入门
一、 一般编写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脚本入门的更多相关文章
- linux的shell脚本入门
Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...
- Linux编写Shell脚本
——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...
- linux脚本错误: line *: [: missing `]',linux编写shell脚本时的注意点
转载:https://www.cnblogs.com/bovenson/p/4548079.html 关于shell的一些注意点,粘贴自拉钩教育精选评论:测试开发核心技术 46 讲-->第6讲 ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- Linux Shell脚本入门--(linux空设备文件和重定向)>/dev/null 2>&1
linux空设备文件和重定向 输出/输入重导向 > >> < << :> &> 2&> 2< ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- linux环境下编写shell脚本实现启动停止tomcat服务
第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...
- 【shell】shell脚本入门
1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...
随机推荐
- JavaScript 日期格式化 简单有用
JavaScript 日期格式化 简单有用 代码例如以下,引入jquery后直接后增加下面代码刷新可測试 Date.prototype.Format = function (fmt) { //auth ...
- 实习日记)select option 选择不同的option时, 页面发生不同的变化
怎么在下拉框的选择不同的option时, 页面发生响应的变化 因为option是没有点击事件什么的, 只有select才有, 所以不能通过option的点击事件来完成, 所以开始的尝试都失败了(之前 ...
- Android 短信验证码控件
Android 短信验证码控件,便于项目中使用统一样式,统一提示改动.个人觉得挺好用的 <span style="font-size:18px;">public cla ...
- 横向卷轴(side-scrolling)地图的canvas实现
标题有点小题大作了,实际上是实现一张看起来连续的运动背景图片. 效果如下: // 实现原理: 图片1与图片2是两张首尾衔接的图片,图片1以一定速度移出canvas,图片2慢慢移进canvas,当图 ...
- STL源代码剖析——基本算法stl_algobase.h
前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...
- 基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
执行分析 1. 打开服务器进程: 2. 执行netstat -a命令观察当前的连接状态: 第1条连接记录说明:绑定了本地主机的任意IP,端口为9877,目前处于监听状态. 3. 打开客户进程: 4. ...
- Lance老师UI系列教程第九课->高仿比特币监控大师
http://blog.csdn.net/lancees/article/details/22898971
- 【BZOJ3307】雨天的尾巴 线段树合并
[BZOJ3307]雨天的尾巴 Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多 ...
- Open Source Streaming Server--EasyDarwin
Welcome to EasyDarwin Streaming Server, which is an open source Streaming Server Based On Appple's D ...
- 关于WordPress后台设置中的WordPress地址和站点地址的解读
今天我在TeachCourse博客中不小心把WordPress地 址和站点地址都改为了http://www.qgjie123.com,结果重新刷新TeachCourse博客页面的时候,页面排版错乱的情 ...