shell脚本编程<一>:变量及脚本中数学计算

准备工作

不要把shell脚本命名为test,因为在Linux中已经有一个名为test的实用程序。首先要使shell找到脚本程序,有三种方法:
1. 将shell脚本文件所在的路径添加到PATH环境变量中
2. 在命令行中使用文件的绝对路径或相对路径运行,不过得修改权限,如命名一个脚本文件为hello,然后修改权限才能运行
3. 同二,命名一个文件为hello.sh,用 sh hello.sh即可

显示消息

脚本第一行一定定要写上 #!/bin/bash ( 表明使用的shell类型);接着都知道脚本程序运行时会打印很多输出,使用 echo 打印输出

使用变量

环境变量
使用set可以显示活动环境变量的完整列表,使用$符号可取值,看一个简单的脚本(脚本中经常需要打印输出自己的工作环境)

#!/bin/bash
echo UID: $UID
echo HOME: $HOME

用户变量

val1=10
val2=-10
val3=hello
val4="hello"

shell脚本自动为变量值确定数据类型(字符串),若要引用得需要$

反引号

反引号允许将shell命令的输出赋值给变量,见程序(这是一种为了日志文件名提取日期的常用技术)

#!/bin/bash
today=`date +%y%m%d`
ls /usr/bin -al > log.$today

重定向输入输出

输入重定向,是把一个文件内容重定向到一个命令中,格式command < inputfile,还有一种重定向:
内置重定向,这种重定向允许在命令行中而非文件中为输入重定向指向数据,使用方式如下,符号<<,但在开头和末尾都必须使用相同的文件标记

comman << marker(常使用EOF)
data
marker(常使用EOF#例如
 wc << EOF
 > test string 1
 > test string 2
 > test string 3
 > EOF

数学计算

expr命令允许处理命令行中的等式,如下

expr 1 + 5 #必须得分开写,不然会被识别为一个
expr 5 * 2(错误)
expr 5 \* 2 (使用转义字符)

再看一个程序

#!/bin/bash
var1=10
var2=20
var3=`expr $var2 / $var1`
echo the result is $var3

更常用的是使用[]和$即可进行数学计算,如下

#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$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/bash
var1=100
var2=45
var3=`echo " scale=4; $var1 / $var2 " | bc`
echo the answer is $var3

对于简短的计算这种方法很好,但有时数字会很多。如果有多个计算,就会很乱,因此可以有两种解决方案
1. 使用重定向,允许把一个文件重定向到bc命令
2. 使用内置重定向
看一个使用内置重定向的例子

#/bin/bash
var1=10.46
var2=43.76
var3=33.2
var4=71

var5=`bc << EOF
scale = 4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
`
echo the answer is $var5

退出脚本

每条在shell中运行的命令都使用一个退出状态,这个退出状态是一个介于0~255之间的整数值,每当命令运行完时,命令就会把退出状态传递给shell。
可以使用$?来查询,如运行完一条命令后可以使用echo $?来查看,下面列举一些常见的推出值

0:命令成功完成
1:通常的未知错误(如提供一个无效的参数)
2:误用的shell命令
126:命令无法执行(用户没有权限)
127:没有找到命令(命令不存在)
128:无效的退出参数
130:Ctrl+C终止的命令

默认情况下,shell脚本以脚本中最后一条命令的退出状态退出,当然你可以使用exit命令更改退出状态码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值