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命令更改退出状态码。

0 0