likes
comments
collection
share

Shell脚本中的变量read

作者站长头像
站长
· 阅读数 29

一. 变量

1. 变量概述

  • 变量即在程序运行过程中它的值是允许改变的量。
  • 变量是用一串固定的字符串去表示不固定的内容。
  • 变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。

变量的作用:

用来存放系统和用户需要使用的特定参数(值)。

  • 变量名:使用固定的名称,由系统预设或用户定义。
  • 变量值:能够根据用户设置、系统环境的变化而变化。

2. 变量类型

变量赋值:  变量名=变量值(name=value)

bash变量类型:

1、根据变量的生效范围可分为:

  • 环境变量(全局变量):全局生效,在任何bash环境中都可以识别。

  • 局部变量:生效范围为当前shell进程。对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。

  • 本地变量:生效范围为当前shell进程中某代码片断,通常指函数。 只能在定义它们的函数/脚本内部中使用。

2、根据是否由系统定义可分为:

  • 内置变量:由系统维护,用于设置工作环境。如PS1,PATH,HISTSIZE, HOSTNAME,USER。
  • 自定义变量:由用户自己定义、修改和使用。

3、特殊变量:

  • 环境变量(全局变量):全局生效,在任何bash环境中都可以识别。:

  • 只读变量:read only, 只可以读取不可以更改 。

  • 位置变量: 通过命令行给脚本传递参数 。n(n是正整数),n(n是正整数),n(n是正整数),{10} 要加花括号。

  • 预定义变量:用来保持脚本程序的执行信息。

-   $0 :当前脚本名称(如果是软链接,显示当前软链接文件名)。
-   $? :查看上一次命令的执行状态,返回0为正常,非0为错误。
-   $* :返回所有参数,当整体返回。
-   $@ :返回所有参数,当个体返回。
-   $# :获取当前shell命令行中参数的总个数id
-   $! :在此之前执行的命令或脚本的最后一个参数id
-   `$$` :获取当前进程的PID。

3. 变量的命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量名称:如:if, for,hostname。

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反。

  • 使用英文时,尽量使用词义通俗易懂,如PATH。

  • 大驼峰 StudentFirstName

  • 小驼峰 studentFirstName

  • 下划线 student_name

变量名=变量值

name=yhy

echo $yhy

4.变量作用范围

  • 默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。

  • 可以通过内部命令export将指定的变量为全局变量(即环境变量),使用户定义的变量在所有子shell环境中可以继续使用。

方法:

  • 格式1:export 变量名
  • 格式2:export 变量名=变量值

可以使用pstree 查看shell的环境

输入bash进入子shell

ctrl+D组合exit 退出子shell

Shell脚本中的变量read

5." ",' ',反撇,{} 符号的作用

符号作用
" "显示调用变量
''不显示变量
``调用命令 =$()
{}g隔绝变量

**5.1 示例 **

5.1.1(" ")(' ')

1.当引号内只表示字符串时,使用双引号或单引号都可以。

Shell脚本中的变量read

2.使用单引号或双引号时,引号内的内容会被当做一个整体。

Shell脚本中的变量read

3.双引号可以通过$符号引用变量值,单引号禁止引用变量值,单引号内的内容都被认为是普通字符。

Shell脚本中的变量read

5.2.1( )反撇

1.( )反撇=$( )

Shell脚本中的变量read

2.当存在嵌套时,不能使用反撇

Shell脚本中的变量read

展开命令行

展开命令执行顺序:

  •  把命令行拆分成单个命令词
  •  展开别名
  •  展开花括号的声明 {}
  •  展开波浪符声明 ~
  •  命令替换 $()和``
  •  
  • 再次把命令行拆分成命令词
  •  展开文件通配符*、?、[abc]等待
  •  准备I/O重定向 < 和 >
  •  运行命令

二.局部变量

定义变量:  变量名=变量值

引用变量:  $变量名 或 ${变量名}

Shell脚本中的变量read

查看变量:

  • echo $变量名:查看单个变量
  • set:查看所有变量,包括局部变量和环境变量

取消变量:  unset 变量名

作用范围:  仅在当前shell环境中有效,无法在子shell环境中使用。

三.环境变量

1.系统内置环境变量

    1. 由系统提前创建,用来设置用户的工作环境
    1. 可以使用env查看环境变量
    1. 需要记住的常用环境变量
符号意义
$USER用户名称
$HOME用户的宿主目录
$LANG语言和字符集
$PWD表示当前所在工作目录
$PATH可执行用户程序的默认路径

2环境变量的配置文件

/etc/profile

四.只读变量

变量值不允许修改(重新赋值)的情况

法使用 unset删除

最快方法重启

五.位置变量

位置变量也称为位置参数

标题
echo "$1"位置1
echo "$2"位置2
echo "${10}"位置10
echo "$10"位置1和0

两位数需要加花括号{},不然$10会被识别为:$1和0 。

Shell脚本中的变量read

Shell脚本中的变量read

六.预定义变量

符号作用
$*返回所有变量,整体返回
$@返回所有变量,单个返回
$?上一次命令执行返回状态,=0则正确 ;非0则错误
$0脚本名称
$!后台任务最后一个id
$$获取当前进程pid

示例:

Shell脚本中的变量read

2)测试 $0$$$#$@ 的作用。

Shell脚本中的变量read

Shell脚本中的变量read

七.read -p

从键盘输入内容为变量赋值

格式: read 变量名

常用选项:

  • -p:后面跟提示信息,即在输入前打印提示信息。
  • -s:安静模式,在输入字符时不再屏幕上显示,例如密码。
  • -t:后面跟秒数,定义输入字符的等待时间。
  • -n:后跟一个数字,定义输入文本的长度。
  • -a:后跟一个变量,该变量会被认为是个数组。

方法一:

[root@localhost opt]# read -p "现在的时间是" time 
现在的时间是9

echo $time

Shell脚本中的变量read

方法二:

[root@localhost opt]# vim 1.sh

 #!/bin/bash
echo -n "请输入你的信息"
read info
echo $info

[root@localhost opt]# bash 1.sh   

Shell脚本中的变量read

Shell脚本中的变量read

Shell脚本中的变量read

方法三:

[root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
            是否覆盖当前文件 (yes/no)yes

Shell脚本中的变量read

八.四个配置文件的作用

1、/etc/profile 文件

系统级的配置文件,开机时系统自动加载该文件中的配置。

系统每次启动都会自动执行/etc/profile 文件里的命令,这个文件是对全局有效的(所有的shell环境和用户)

~/.bash_ profile 文件

不同用户登录系统时,会自动执行自己家目录中的~/ .bash_ profile 文件中的命令,之后自动执行~/ . bashrc。(因为~/ .bash_ profile文件中规定了,如果~/ . bashrc是个文件,则执行该文件)。

~/.bashrc 文件

当前用户每切换一个shell环境都会自动加载~/ . bashrc 文件中的配置 ,之后自动执行/etc/bashrc文件。(因为~/ . bashrc文件中规定了,如果/etc/bashrc是个文件,则执行该文件)。

4、/etc/bashrc 文件

/etc/bashrc针对所有用户,用户每切换一个shell环境都会自动执行。

九.重点总结

1、全局变量和局部变量:

  • 环境变量(全局变量):在当前shell环境和子shell环境(包括孙子shell环境)中都生效。
  • 局部变量:只在当前shell环境中生效,子shell环境中无效。

2、设置、查看和删除变量的命令:

  • 变量赋值:

    • 方法1:变量名=变量值(name=value)
    • 方法2:read 变量名, 之后从键盘输入中获取变量名的值
  • 设置环境变量:export name=value 或 export name

  • 设置只读变量:readonly name 。只读变量不可删除或重新赋值。

  • 查看变量和变量值:

    • env:查看所有环境变量。
    • set:查看所有变量,包括局部变量和环境变量。
  • 删除变量:unset name

3.read -p

  • -p:后面跟提示信息,即在输入前打印提示信息。
  • -s:安静模式,在输入字符时不再屏幕上显示,例如密码。
  • -t:后面跟秒数,定义输入字符的等待时间。
  • -n:后跟一个数字,定义输入文本的长度。
  • -a:后跟一个变量,该变量会被认为是个数组。

4.预定义变量

变量作用
$?表示前一条命令执行后的返回状态。返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常。
$*表示所有位置参数的内容。当整体返回。(将输入的参数作为一个单词1,2,3)
$@表示所有位置参数的内容。当个体返回。可作为数组。(将参数内容分割成n份,每份作为独立个体)1;打印第一个
$#表示命令行中位置参数的总个数。
$0表示当前脚本名称(如果是软链接,显示当前软链接文件名)。
$_表示在此之前执行的命令或脚本的最后一个参数。
$$获取当前进程的PID。

5.几个符号的作用

符号作用
" "显示调用变量
''不显示变量
``调用命令 =$()
{}g隔绝变量
转载自:https://juejin.cn/post/7267554771538608165
评论
请登录