Shell脚本第2部分:接受输入和执行Shell算术

嗨! 本文是Howtoforge shell脚本教程系列的第二部分。 到这个时候,我假设你已经阅读系列的第一部分 ,并且知道如何创建一个简单的脚本并执行它。 在第二部分中,您将了解如何接受来自用户的输入并通过shell脚本进行处理。 让我们开始吧!

Linux中的变量

就像编程语言一样,Linux shell具有将数据存储在变量中的功能。 一个变量是一个容器,它临时存储将通过编程语言处理的数据。 Linux中有两种类型的变量:环境变量和shell变量。

环境变量

环境变量是Linux中的默认变量,用于在shell中的进程之间传递信息。 环境变量是区分大小写的,应该始终大写,以便访问它们。

下表显示了Linux shell中常见的环境变量:

变量名 用法
BASH 保存Bash脚本的命令解释器的完整路径
BASH_VERSION 保存当前使用的机器的bash发行版本
保存主目录的相对路径。
LOGNAME 保存登录的当前用户的帐户名称
OSTYPE 持有描述所使用机器的当前操作系统的字符串
路径 在Linux中保存可执行文件的冒号分隔的绝对路径
PWD 保存shell的当前工作目录
Shell 拥有首选的命令行shell
用户 类似于LOGNAME。 它保存当前登录的用户的帐户名称
_ 在shell中保存最近使用的命令的名称

要显示环境变量的值,用户必须在要访问的变量上添加一个美元符号($)。 例如,要使用echo显示一些系统信息,如当前工作目录,登录用户和OS类型,我们使用:

#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPE

结果是:

要在Linux中获取整个环境变量列表,请使用env命令。

改变环境变量的值

为了提供系统灵活性,可以操纵这些环境变量。 要将值设置为环境变量,请使用赋值表达式(等号)。

例:

#!/bin/bash
echo $USER
USER="new user"
echo $USER

脚本的结果是:

运行脚本时,首先,$ USER行$ echo中的$ USER显示USER变量的值。 通过使用赋值运算符(=),USER变量更改其值。 但是,如果用户将未知值分配给环境变量,shell将创建与脚本本地上下文环境变量类似的另一个shell变量,但不会影响其他应用程序的行为。 意思是,一旦我们的脚本被关闭,USER变量将保留其默认值。

请注意,在前面的例子中,当操作环境变量的值(如USER =“new user” )时,我们在变量名中省略了美元符号($)。 另外,当使用赋值运算符时,USER和= sign之间不能有空格。 在它们之间添加空格会产生错误。

Shell变量

shell还允许用户声明变量。 就像PHP一样,要在shell脚本中声明一个变量,用户不必担心声明其数据类型; 解释器将根据用户在运行时存储的数据自动检测变量的数据类型。

命名shell变量的规则

就像任何编程语言一样,命名shell变量也有规则。 以下总结规则:

  1. 变量的名称必须以字母或下划线开头。
  2. 它必须只包含字母数字或字符。
  3. 变量因此区分大小写,变量路径PATH和Path是不同的。

为了证明这个规则,我们将在下面创建一个简单的脚本:

#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABC

行2和3返回“命令未找到”错误,因为变量12abc以数字字符开头,变量abc#*包含非法字符。 我们还证明_abc和_ABC是不同的变量,而_ABC = 2行不会覆盖_abc的值。

使用read命令将值分配给shell变量:

read是一个允许用户接受输入的命令。 使用read命令的语法是:

read <variable_name>

例如,我们将创建一个脚本,允许用户输入他的姓名并显示它们。 为了让用户知道该怎么做,我们使用echo命令显示用户提示。

#!/bin/bash
echo "Your first name: "
read fname
echo "Your last name:"
read lname 
echo "Hello $fname $lname ! I am learning how to create shell scripts."

结果是:

请注意,像我们前面的例子一样,我们不必声明一个变量来使用它。 解释器也自动创建在read命令中使用的变量。 但是,在本示例中,我们反复使用echo命令为用户创建提示。 读取命令还具有在接受用户输入时创建提示的功能。 在read命令中使用prompt的语法是:

read -p "Your prompt: " <variable_name>

为了简化我们以前的代码,我们可以将代码重建为:

#!/bin/bash
read -p "Your first name: " fname
read -p "Your last name: " lname
echo "Hello $fname $lname ! I am learning how to create shell scripts"

read命令的另一个好处是命令提示符正好在文本之后,而不在下面的行中。

读命令也可用于接受密码。 与普通输入不同,密码被屏蔽以提供安全性。 接受密码的语法是:

read -s -p "your prompt" <variable_name>

使用shell执行简单的算术运算

除了接受输入和显示输出外,bash shell还具有内置算术选项。 下表总结了Bash shell的内置算术运算符。

操作员 描述 句法 用法
+ 加成 a = $((b + c)) 添加bc的值并将其存储到变量a
- 减法 a = $((bc)) b中减去c的值并将其存储到变量a
* 乘法 a = $((b * c)) bc的值相乘并将其存储到变量a
/ a = $((b / c)) b的值除以c并将其存储到变量a
模数 a = $((b%c)) 执行bc的模除法并将其存储到变量a
++ 预增量 $((++ aa)) 立即增加变量a的值
++ 后增量 $((a ++)) 增加变量a的值并将更改反映到下一行
- 预减量 $(( - a)) 立即减少变量a的值
- 递减后 $((a--)) 减少变量a的值,并将变化反映到下一行
** 指数 $((**)) 将a的值提高到2的指数
+ = 加上平等 $((a + = b)) 添加ab的值并将其存储到变量a
- = 负数相等 $((a- = b)) a中减去b的值并将其存储到变量a
* = 时间相等 $((a * = b)) ab的值相乘并将其存储到变量a
/ = 斜线相等 $((a / = b)) 除以a的值,并将其存储到变量a
%= Mod-equal $((a%= b)) ab之间执行模数除法并将其存储到变量a

请注意,每次执行算术指令时,我们的所有变量将以美元符号和双括号括起来。 通过这样做,解释器将我们的变量的值视为整数。 没有它,解释器将变量的值视为字符串。 举一个例子,看下面的脚本:

#!/bin/bash
read -p "Enter int1: " a
read -p "Enter int2: " b
echo $((a+b))
c=$a+$b
echo $c

当我们运行我们的例子时,行$((a + b))分别添加存储在变量a和b中的用户的值,而c = $ a + $ b将变量a和b作为字符串。

结论

我们已经介绍了如何接受输入并将其存储在变量上,以及如何在bash shell脚本中执行算术运算。 在下一部分中,我们将介绍控制结构,特别是决策结构。

参考文献:

Linux信息项目。 (2007)。 检索2015年4月29日,从Linfo.org:http://www.linfo.org/

Cooper,M.(nd)。 高级Bash脚本指南。 检索于2015年4月29日,来自http://www.tldp.org/LDP/abs/html/

环境变量。 (nd)。 从2015年4月29日检索,从Ubuntu文档: https//help.ubuntu.com/community/EnvironmentVariables

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏