shell脚本编程<一>:变量及脚本中数学计算
来源:互联网 发布:mac 网游 编辑:程序博客网 时间:2024/05/02 02:00
准备工作
不要把shell脚本命名为test,因为在Linux中已经有一个名为test的实用程序。首先要使shell找到脚本程序,有三种方法:
1. 将shell脚本文件所在的路径添加到PATH环境变量中
2. 在命令行中使用文件的绝对路径或相对路径运行,不过得修改权限,如命名一个脚本文件为hello,然后修改权限才能运行
3. 同二,命名一个文件为hello.sh,用 sh hello.sh即可
显示消息
脚本第一行一定定要写上 #!/bin/bash ( 表明使用的shell类型);接着都知道脚本程序运行时会打印很多输出,使用 echo 打印输出
使用变量
环境变量
使用set可以显示活动环境变量的完整列表,使用$符号可取值,看一个简单的脚本(脚本中经常需要打印输出自己的工作环境)
#!/bin/bashecho UID: $UIDecho HOME: $HOME
用户变量
val1=10val2=-10val3=helloval4="hello"
shell脚本自动为变量值确定数据类型(字符串),若要引用得需要$
反引号
反引号允许将shell命令的输出赋值给变量,见程序(这是一种为了日志文件名提取日期的常用技术)
#!/bin/bashtoday=`date +%y%m%d`ls /usr/bin -al > log.$today
重定向输入输出
输入重定向,是把一个文件内容重定向到一个命令中,格式command < inputfile,还有一种重定向:
内置重定向,这种重定向允许在命令行中而非文件中为输入重定向指向数据,使用方式如下,符号<<,但在开头和末尾都必须使用相同的文件标记
comman << marker(常使用EOF)datamarker(常使用EOF)#例如 wc << EOF > test string 1 > test string 2 > test string 3 > EOF
数学计算
expr命令允许处理命令行中的等式,如下
expr 1 + 5 #必须得分开写,不然会被识别为一个expr 5 * 2(错误)expr 5 \* 2 (使用转义字符)
再看一个程序
#!/bin/bashvar1=10var2=20var3=`expr $var2 / $var1`echo the result is $var3
更常用的是使用[]和$即可进行数学计算,如下
#!/bin/bashvar1=100var2=50var3=45var4=$[$var1*($var2-$var3)]echo the result is $var4
但注意Bash shell的数学操作只支持整数算法
浮点解决方案
为了解决上诉只能进行整数的问题,常用的是用内置的bash计算器(bc),退出须输入quit。
浮点算术被称为scale的内置变量控制。(scale 是设小数位数的,默认为0)
在脚本中使用bc的基本格式为:
var=`echo “options; expression” | bc`
下面在脚本中使用bc,此例子设置4位小数
#!/bin/bashvar1=100var2=45var3=`echo " scale=4; $var1 / $var2 " | bc`echo the answer is $var3
对于简短的计算这种方法很好,但有时数字会很多。如果有多个计算,就会很乱,因此可以有两种解决方案
1. 使用重定向,允许把一个文件重定向到bc命令
2. 使用内置重定向
看一个使用内置重定向的例子
#/bin/bashvar1=10.46var2=43.76var3=33.2var4=71var5=`bc << EOFscale = 4a1 = ($var1 * $var2)b1 = ($var3 * $var4)a1 + b1EOF`echo the answer is $var5
退出脚本
每条在shell中运行的命令都使用一个退出状态,这个退出状态是一个介于0~255之间的整数值,每当命令运行完时,命令就会把退出状态传递给shell。
可以使用$?来查询,如运行完一条命令后可以使用echo $?来查看,下面列举一些常见的推出值
0:命令成功完成1:通常的未知错误(如提供一个无效的参数)2:误用的shell命令126:命令无法执行(用户没有权限)127:没有找到命令(命令不存在)128:无效的退出参数130:Ctrl+C终止的命令
默认情况下,shell脚本以脚本中最后一条命令的退出状态退出,当然你可以使用exit命令更改退出状态码。
- shell脚本编程<一>:变量及脚本中数学计算
- Linux shell 脚本中变量的数学计算
- Shell脚本编程-变量
- Shell脚本编程-变量
- Shell脚本中变量$
- shell脚本编程(一)
- shell脚本编程之变量
- shell 脚本编程之变量
- Shell脚本编程中常用的数学运算实例
- shell脚本之数学计算问题
- shell脚本中局部变量
- shell脚本中局部变量
- shell脚本编程(一)
- shell脚本编程(一)
- shell脚本编程(一)
- shell脚本编程(一)
- SHELL脚本编程进阶(一)
- Shell 脚本编程诀窍 第三章 变量
- 碎片(fragment)
- 7.读取数据
- 安卓res资源混淆器
- $_SERVER['REQUEST_URI']
- FileNet5.2.1 新建Component queue及在流程中使用Component节点
- shell脚本编程<一>:变量及脚本中数学计算
- WCF初见
- 欢迎使用CSDN-markdown编辑器
- 基于图像的三维重建系统概览
- ReactNativeiOS(三)开发零碎3 warning: Each child in ar array or integrator should have a unique "key" prop
- python递归深度报错--RuntimeError: maximum recursion depth exceeded
- 2015年广工操作系统实验(要求实现图形化界面)
- Codeforces 610D Vika and Segments 【线段树扫描线 求面积并】
- 安装CocoaPods遇到的问题及解决办法