构建基本脚本(转)*****好文章*****
10.1 使用多个命令
如果两个命令一起使用,可在同一提示符行输入它们,用分号隔开
10.2 创建shell脚本文件
- shell脚本第一行格式:#!/bin/bash
- 通常shell脚本里,用#来注释行
- shell脚本的第一行是一个例外,#后!号告诉shell用哪个shell来运行脚本
- 在指定了shell之后,可在文件的每行输入命令,后加一个回车
- 如有需要,可用分号来在一行输入你要用的两个命令
- 在shell脚本中,你可以在不同行来列出命令,shell会根据命令在文件中出现的顺序来处理命令
1
2
3
4
|
#!/bin/bash
#This script displays the dae and who's logged on
date
who
|
- 要让shell找到自己编写的脚本并顺利运行,则需要采取以下措施
- 将shell脚本文件所处的目录添加到PATH环境变量中
- 在提示符中用绝对路径或相对文件路径来引用shell脚本
- 修改自己编写的shell脚本权限为可执行:chmod u+x mytestshell
10.3 显示消息
- echo 命令
- 作用:显示一个简单的文本字符串
- 默认情况:不需要使用引号将要显示的文本圈起来
- 对于要显示单双引号问题:在字符串中使用到了他们,在文本中使用其中一种引号,而用另外一种将字符串圈起来
- 参数 -n:在同一行显示一个文本字符串作为命令输出(即echo的内容+命令输出在同一行)
1
2
3
4
5
6
7
8
9
10
11
|
$cat test1
#!/bin/bash
echo -n "The time and date are: "
date
echo "Let's see who's logged into the system: "
who
$./test1
The time and date are: Mon Feb 21 15:42:23 EST 2011
Let's see who's logged into the system:
Christing tty2 2011-02-21 15:26
...
|
10.4 使用变量
10.4.1 环境变量
- set命令:显示完整的活动的环境变量列表
1
2
3
4
5
|
$set
BASH=/bin/bash
...
HOME=/home/Samantha
...
|
- 在环境变量名称之前加个美元符($)来在脚本中使用这些环境变量
- 在双引号中使用环境变量shell依然能够识别,只要脚本在引号中看到美元符,就会认为在引用一个变量
- 如果后面跟的不是变量,则需要在前面加上反斜线“\”(如需使用$)
1
2
3
4
5
6
7
8
9
10
|
$cat test2
#!/bin/bash
echo "User info for userid: $USER"
echo UID: $UID
$./test2
User info for userid: Samantha
UID: 1001
$echo "The cost of the item is \$15"
The const of the item is $15
|
10.4.2 用户变量
- 除了环境变量,shell脚本还允许在脚本中定义和使用自己的变量
- 定义变量允许临时存储数据并在整个脚本中使用,从而使shell脚本看起来跟向计算机程序
- 用户变量
- 格式:不超过20个字母、数字或下划线的文本字符串,区分大小写
- 赋值形式:值通过等号赋给用户变量,在变量、等号和值之间不能出现空格
- shell脚本会自动决定变量值的数据类型,变量的生命周期一直到shell脚本结束
1
2
3
4
5
6
7
8
9
|
$cat test
#!/bin/bash
value1=10
value2=$value
echo The resulting value is $value2
$./test
The resulting value is 10
|
10.4.3 反引号(重要)
- 作用:将shell命令的输出赋给变量
- 使用:必须使用反引号把整个命令行命令圈起来
1
|
testing=`date`
|
- 例子:在脚本中通过反引号获得当前日期并用它来生成为唯一文件名
- today被赋予格式化后的date命令的输出,这是用来为日志文件名抓取日期信息常用的一种技术
- %y%m%d:date命令将日期显示为两位数的年、月、日的组合,如110131
1
2
3
|
#!/bin/bash
today=`date +%y%m%d`
ls /usr/bin -al > log.$today
|
10.5 重定向输入和输出(重要)
10.5.1 输出重定向
- 重定向最基本的类型是将命令的输出发到一个文件中,用“>“命令来完成:command > outputfile
- > 与 >>区别:前者直接覆盖已有的文件内容,后者则是追加到文件末尾
10.5.2 输入重定向
- 输入重定向将文件的内容重定向到命令,用”<”来完成:command < inputfile
- wc命令重定向例子:
- wc命令提供了对数据文本的计数,默认情况会输出3个值
- 文本的行数
- 文本的词数
- 文本的字节数
- wc命令提供了对数据文本的计数,默认情况会输出3个值
1
2
3
|
$wc < test6
2 11 60
$
|
- 内联重定向
- 作用:允许在命令行而不是在文件指定输入重定向的数据
- 符号:<<
- 格式:内联重定向符号<<加上指定一个文本标志来划分要输入数据的开始和结尾
- 在命令行使用内敛输入重定向时,shell会使用PS2环境变量中定义的次提示符来提示输入数据
1
2
3
4
5
6
7
8
9
10
11
12
|
//格式:
command << marker
date
marker
//eg:
$wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
3 9 42
$
|
10.6 管道(重要)
- 管道最流行的用法是将命令产生的长输出结果通过管道传送给more命令
- ls -l命令产生一个目录中所有文件的长列表,对于大量文件的目录来说,这个列表会很长,通过管道连接到more命令,可以强制输出在每屏数据的末尾停下来
10.7 执行数学运算
10.7.1 expr命令
- expr命令允许在命令行上处理数学表达式
1
2
|
$expr 1 + 5
6
|
- 许多expr命令操作符在shell中有其他意思(比如星号*)
- 解决方法:用转义字符来识别容易被shell错误解释的任意字符
- 在shell脚本中,要将数学运算结果赋给一个变量,需要使用反引号
1
2
3
4
5
6
7
|
$expr 5 * 2
expr: syntax error
$
//解决
$expr 5 \* 2
expr: syntax error
$
|
10.7.2 使用方括号
- 在bash中,再讲一个数学运算结果赋给某个变量时,可以使用“”和“[]”组合([ operation ])将数学表达式圈起来,并且shell不会误解称号*和其他符号
1
2
3
4
5
6
7
8
9
|
$cat test
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[ $var1 * ($var2 - $var3)]
echo The final result is $var4
$./test
The final result is 500
|
- bash shell 只支持整数运算
1
2
3
4
5
6
7
8
|
$cat test
#!/bin/bash
var1=100
var2=45
var3=$[ $var1 / var2 ]
echo The final result is $var3
$./test
The final result is 2
|
10.7.3 浮点解决方案
- bc的基本用法
- 允许在命令行输入表达式、解释表达式、计算并返回结果的一种编程语言
- bash计算器能够识别
- 数字(整数和浮点数)
- 变量(简单变量和数组)
- 注释(以井号开始的行或C语言中的/**/对)
- 表达式
- 编程语言(例如if-then语句)
- 函数
- 在shell提示如下通过bc命令访问bash计算器
- 输入quit退出bash计算器
1
2
3
4
5
6
7
|
$bc
...
12 * 5.4
64.8
3.156 * (3 + 5)
25.248
quit
|
- 浮点运算是由一个内建的称为scale的变量控制的,并须将这个值设置为结果里你想要的小数后的位数
- 参数-q:会将bash计算器输出的很长的欢迎条屏蔽掉
1
2
3
4
5
6
7
8
|
$ bc -q
3.44 / 5
0
scale=4
3.44 / 5
.6880
quit
$
|
- 在脚本中使用bc
- 基本格式:variable=
echo "options: expression" | bc
- options:允许你来设置变量,如果设置的变量不止一个,可以用分号来分开它们
- expression:定义了通过bc执行的数学表达式
- 基本格式:variable=
1
2
3
4
5
6
7
8
9
10
11
12
|
$cat test
#!/bin/bash
var1=100
var2=45
var3=`echo " scale=4; 3.44 / 5" | bc`
var4=`echo " scale=4; $var1 / var2" | bc`
echo The var3 is $var3
echo The var4 is $var4
$./test
The var3 is .6880
The var4 is 2.2222
|
- bc与内联输入重定向
- 在bash计算器中创建的变量只在bash计算其中有效,不能在shell脚本中使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$cat test
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=`bc << EOF
scale = 4
a1 = ( $var1 * $var2 )
b1 = ( $var3 * $var4 )
a1 + b1
EOF
`
echo The final answer for this mess is $var5
|
10.8 退出脚本(重要)
10.8.1 查看退出状态码
- ?专属变量保存上个执行的命令的退出状态码,必须在你要查看的命令之后马上查看或使用?变量
1
2
3
4
|
$date
Sat Jan 15 10:01:30 EDT 2011
$echo $?
0
|
- linux常用退出状态码
- 0:命令成功结束
- 1:在命令中发生了未知的错误
- 126:用户没有执行命令的权限
- 127:命令不可执行
10.8.2 exit命令
- 默认情况下,shell脚本会由脚本中最后一个命令的退出码退出
- exit命令:在脚本结束时指定一个退出状态码
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$cat test
#!/bin/bash
var1=10
var2=30
var3=$[ $var1 + $var2 ]
echo The anwser is $var3
exit 5
$chmod u+x test
$./test
The anwser is 40
$echo $?
5
$
|
- 退出码最大值为255,区间为0~255,shell通过模运算得到这个结果
- 模运算:一个数的模运算就是被除后的余数,300的余数是44
1
2
3
4
5
6
7
8
9
10
11
12
|
$cat test
#!/bin/bash
var1=10
var2=30
var3=$[ $var1 * $var2 ]
echo The anwser is $var3
exit var3
$./test
The anwser is 300
$echo $?
44
$
|
退出码很有用,可以判断您的命令是否正常执行。
转载于:https://www.cnblogs.com/zhangmingcheng/p/5804753.html
构建基本脚本(转)*****好文章*****相关推荐
- python ios自动化_iOS python 自动化构建打包脚本
1.准备工作和注意事项 2.配置填写 项目.python脚本文件及plist目录: plist文件: 3.生成相关目录 4.xcodebuild命令打包 5.上传svn 建议: 1.上传app sto ...
- Linux 命令行与shell编程 第10章 构建基本脚本
本章内容 构建基本脚本 使用多个命令 创建shell脚本文件 现在我们已经介绍了Linux系统和命令行的基础知识,可以开始编程了.本章讨论编写shell脚本的基础知识.在开始编写自己的shell脚本大 ...
- Jenkins安装、配置、构建、脚本、配置邮箱、上传fir
Jenkins好处: 缩减开发周期,快速迭代版本 自动化流水线操作带来的高效 随时可部署 极大程度避免低级错误 Jenkins用处: 构建项目 跑测试用例检测bug 静态代码检测 部署 写在前面 建议 ...
- jenkins构建自动化脚本遇到的问题及解决方式
jenkins配置: 1.构建一个自由风格的项目填写构建步骤 例如:D:\Python3.7\python.exe (python安装路径)C:\Users\P310\Desktop\NewUITes ...
- python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...
- 脚本:获取CSDN文章的访问量
目标 获取所有文章名,链接,阅读人数,评论数 以适合pandas读取的格式存储之 分析 页面跳转 首页:http://blog.csdn.net/fontthrone?viewmode=list 第二 ...
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- 使用Grunt构建任务管理脚本(转)
Grunt是构建Web开发的一个系统,但它创建比较困难.在这个指南中,你将学会如何配置Grunt创建一个现代的Web项目.当你完成教程中的配置之后,你的Gruntfile将具有: 从源目录中向目标目录 ...
- 码云图床php,PHP 脚本实现 Markdown 文章上传到七牛图床
在使用 Markdown 编写文章之后,经常需要发布到不同的平台,这里会遇到一个问题,文章的图片需要手动的进行上传,管理起来非常不方便,因此,强烈建议将图片统一上传到图床中,这样的话一篇文章就可以轻松 ...
最新文章
- MongoDB(一):安装
- 分享一款博客园皮肤及其解决方案
- python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶
- Unity之Update与FixedUpdate区别
- MySQL Windows ZIP 免费安装和启动设置
- 配置Eclipse中的Maven环境
- phpStorm如何用FTP,SSH连接到虚拟机linux系统?
- mysql键1键2_详解mysql基本操作详细(二)
- Java rp api_Java初级--常用的API
- 谷歌对用户搜索加密这一做法对seo的影响!
- 开源纯C#工控网关+组态软件(四)上下位机通讯原理
- 前端学习(2138):前端工程化
- 《编程珠玑(第2版•修订版)》—第2章2.2节无处不在的二分搜索
- 不同于NLP,数据驱动、机器学习无法攻克NLU,原因有三
- 基于JAVA+SpringMVC+MYSQL的网上订餐系统
- 想要导航首页提示页_如何设计电商首页运营后台
- Java求质数(素数)(超详细)
- 从ResNet101到ResNet50
- SQLI-LABS——Page-2 Advanced Injections Less21~Less37
- sublime text 3 php 语法错误检查
热门文章
- laravel架构判断id存在与否 存在进行什么操作_基于 Module 的 Laravel API 架构
- 现代分类方法在医学诊断中的应用——基于R的实现
- 数据分析方向之连续性的价值分析
- python一切都是对象 知乎_python一切皆对象
- 决策树(五)--OpenCV决策树
- linux安装steam
- Better-scroll的安装及使用
- android启动服务的生命周期,Android Service的两种启动方式以及生命周期
- java权限精确到按钮_搞定权限设计1-页面按钮控制(精确到某个用户和某个按钮)...
- mysql与其他数据库的区别_mysql与其他数据库的区别