Bash 第二讲 引号 变量 读取用户输入

Bash 引号

字符串

当您输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别。请仔细阅读以下示例:

#!/bin/bash

echo 'Hello World!'
echo
echo "Welcome to W3Cschool!"

执行结果:

$ ./bash_script.sh
Hello World!

Welcome to W3Cschool!
变量

当您想打印输出一个已定义的变量,则需要使用双引号。这时若使用单引号不会将其视为变量。请仔细阅读以下示例:

#!/bin/bash

comment="Welcome to W3Cschool!"

echo "$comment"
echo '$comment'

执行结果:

$ ./bash_script.sh

Welcome to W3Cschool!
$comment
复合示例

请仔细阅读以下示例,以帮助您更好的理解在 Bash 中,引号的概念及使用。

$ ./bash_script.sh

echo
echo "Hello World!"
comment='Welcome to W3Cschool!'
echo $comment
echo
echo "Hello World!"
comment="Welcome to W3Cschool!"
echo $comment
echo
echo "Hello World!"
remark="Hello User, $comment"
echo $remark
echo
echo "Hello World!"
remark='Hello User, $comment'
echo $remark

执行结果:

$ ./bash_script.sh

Hello World!
Welcome to W3Cschool!

Hello World!
Welcome to W3Cschool!

Hello World!
Hello User, Welcome to W3Cschool!

Hello World!
Hello User, $comment

Bash 变量

变量的定义
  • 变量是一个容器,用于临时存储数据(整数、浮点数、字符串等类任意类型的数据)
  • 变量名可包含字母,数字,下划线,并且只能以字母和下划线开头。
Bash 变量声明

语法:

Variable_name=value

Bash 变量的定义规则:

  • 变量名区分大小写,a和A为两个不同的变量。
  • 变量名可以使用大小写字母混编的形式进行编写。
  • 变量名与值之间的=两侧都不能有空格。
  • 读取打印变量时,需使用**$+变量名**。
  • 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。
Bash 数据类型

在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。 如果您将数字值赋值给变量,它将会自动转换为整数工作;如果您将字符串赋值给该变量,那么它将会转换为字符串类型。

Bash 变量类型

Bash 变量有两种类型:
1. 系统定义的变量 由 Linux 操作系统本身创建和维护的预定义变量。它们的命名标准通常是以大写字母对变量进行命名。

  • BASH 表示 Shell 名称,示例:
BASH=/user/bin/bash
  • BASH_VERSION 指定 Bash 持有的 shell 版本,示例:
BASH_VERSION=4.2.46(2)
  • COLUMNS 指定编号,屏幕的列数,示例:
COLUMNS=80
  • HOME 为用户指定主目录,示例:
HOME=/home/W3Cschool
  • LOGNAME 指定日志记录用户名,示例:
LOGNAME=W3Cschool

在这里插入图片描述

若要了解更多的系统定义变量,您可以在终端输入命令set,env,printenv以获取这些变量的列表。
2. 用户定义的变量 由用户自行创建和维护的变量。这些类型的变量多数以小写字母参与命名,但不具有大小写强制性规定。

#!/bin/bash
say=Hello user
Comment=welcome to W3Cschool
echo "$say,$Comment!"

执行结果:

Hello user,welcome to W3Cschool!
Bash 变量使用

我们通常对 Bash 中的变量执行两个操作:
为变量赋值

comment=Welcome to W3Cschool

读取变量的值

comment=Welcome to W3Cschool
echo $comment

注意:如果通过单引号将变量或字符串进行任意拼接组合,那么将无法成功读取它们。

命令行参数

命令行参数通过将数据输入传递给代码功能块,使脚本更具动态性,如下示例:

./bash_script.sh parameter1 parameter2...

注:脚本名称与所有传递的参数之间不能存在空格,本处使用空格便于阅读。
如何使用命令行参数

在 Bash 中,命令行参数与以下默认参数或特殊变量的引用一同使用。

  • $0 ——指定要调用的脚本名称。
  • $1-9 ——存储前9个自变量的名称,或可用作自变量的位置。
  • $# ——指定传递给脚本的参数总数。
  • $* ——将所有命令行参数连接在一起来存储它们。
  • $@ ——将参数列表存储为数组。
  • $? ——指定当前脚本的进程 ID 。
  • $$ ——指定最后一个命令或最近执行过程的推出状态。
  • $! ——显示最后一个后台作业的 ID 。
    传递命令行参数的两种方法:
    使用位置编号 使用默认参数($1-9)来访问命令行参数。
#!/bin/bash
echo $0 '> echo $0'
echo $1 $2 $3 $4 $5 $6 $7 $8 $9'> echo $1 $2 $3 $4 $5 $6 $7 $8 $9'

执行结果:

$ chmod +x bash_script.sh
$ ./bash_script.sh Here is the W3Cschool
./bash_script.sh > echo $0
Here is the W3Cschool >echo $1 $2 $3 $4 $5 $6 $7 $8 $9

只保存前9个参数,有点意思呀
在这里插入图片描述

使用数组 将参数作为数组传递,按照给定的算法来应用此方法。

  • 声明变量名,将值分配为$@。
variable_name=("$@"
```)

  • 通过指定数组索引来显示参数的值。
${variable_name[i]}
  • 保存脚本,并通过传递参数来执行脚本。
#!/bin/bash
parameter=("$@")
echo ${parameter[0]} ${parameter[1]} ${parameter[2]}
命令替换

在 Bash 中,命令替换允许命令的输出替换命令本身。 命令替换是指Bash执行的扩展,它获取Bash命令的输出,存储在一个变量中并显示回显。 命令替换在脚本和变量分配方面增强了数据的灵活性。
语法:

  • 将命令替换为变量(命令替换的经典形式)是使用反引号,如下示例:
variable_name=`command_name`
variable_name=`command_name [option...] argument1 argument2...`
variable_name=`/path/to/command`
  • 以$开头,将命令放在方括号内进行命令i换,如下示例:
variable_name=$(command_name)
variable_name=$(command_name [option...] argument1 argument2...)
variable_name=$(path/to/command)

通过将一条命令封装在`(反引号)中,可以将它嵌入令一条命令。

echo "The time and date are `date`"
a=`expr 1 + 1`
echo $a

( ) 与 ‘ ‘ 区 别 在 操 作 上 , 这 两 者 都 是 达 到 相 应 的 效 果 , 但 是 建 议 使 用 ( )与``区别 在操作上,这两者都是达到相应的效果,但是建议使用 ()使( ),理由如下:

1.``很容易''搞混乱,尤其对初学者来说。
2.在多层次的复合替换中,``必须要额外的转义字符处理(反斜线),而$( )比较直观。
3.$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。

变量替换 ${}
变量替换
变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

可以使用的变量替换形式:

形式 说明

${var}    变量本来的值
${var:-word}    如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}    如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}    如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常

赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

Bash 读取用户输入

若想要读取 Bash 用户输入,您需要使用内置的 Bash 命令read。语法:

read <variable_name>
示例

1.使用read命令从 Bash 脚本中分别读取单个和多个变量。

#!/bin/bash

echo "Enter the your name: "
read user_name
echo "Your name is $user_name"
echo
echo "Enter your age, phone and email: "
read age phone email
echo "your age is:$age, phone is:$phone, email: $email "

2.使用-p PROMPT命令行选项在同一行上输入。

#!/bin/bash

read -p "username:" user_var
echo "The username is: " $user_var

3.在静默模式下,使用命令行选项-s,-p来传递用户名并隐藏密码
注:-s指用户将输入保持在静默模式,-p指用户在新的命令提示符下输入。

#!/bin/bash

read -p "username : " user_var
read -sp "password : " pass_var
echo
echo "username : " $user_var
echo "password : "  $pass_var

4.使用-a命令行选项对数组进行多个输入。
注:-a指脚本读取数组,而variable_name是引用数组变量名称。

#!/bin/bash

echo "Enter names : "
read -a names
echo "The entered names are : ${names[0]}, ${names[1]}."
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页