Shell中的变量

命令替换

在Shell编程时经常会用到命令替换,命令替换有两种方式:反引号(``)和$()符号。

反引号在Esc键的下方,它的作用是将命令字符替换为命令的执行结果。例如,替换ls命令,输出当前目录下的文件和目录。

也可以用$()来实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JBgfESt1-1624693127820)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626105827098.png)]

I/O重定向

  • 输入重定向

    命令 0 <文件名

    0是标准输入文件标识符,可以被省略。以wc命令为例,将yum.conf中的内容作为命令wc的输入,统计文件中的行数
    [外链图片转存失败,源站可能有防盗链机制,建议将图失败,源站可能有防盗链机制,建议将图片保存下来直接上传片保存下来(img-N4iweThg-1624693127823)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626110301488.png)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626110301488.png)]

  • 输出重定向

  命令 1>文件名

1是标注输出文件标识符,可以被省略。以cat命令为例,将,、etc/passwd文件中的内容重定向到file文件的具体操作如下

  cat /etc/passwd > file

以上命令会将"cat /etc/passwd > file"的结果以覆盖的形式输入到file中

如果不想覆盖,可以使用>>以追加的形式附加到file中

  • 错误重定向
  命令 2>文件名

其中2是标准错误文件描述符,不可以被省略。例如打开一个不存在的文件会报错,如果使用错误重定向可以将错误信息输出达到文件中。下面打开不存在的文件cfile将其错误信息重定向到文件newfile中,命令如下所示

  cat c 2>newfile

查看的结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOlng3kk-1624693127825)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626110959244.png)]

管道

管道符号为"|",它可以将多个简单的命令连接起来,使一个命令的输出,作为另外一个命令的输入由此来完成更加复杂的功能

命令1|命令2|...|命令n

以ls命令和grep命令的这为例来演示管道符的使用,具体如下所示

ls -l /etc |grep init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prizyeAM-1624693127826)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626111345573.png)]

本地变量

本地变量相当于c语言中的局部变量,它只在本Shell中有效,如果Shell退出,本地变量将被销毁。本地变量的定义格式如下

NAME = value

NAME是变量名,value是赋给变量的值。如果value没有指定,变量将被复制为空字符串。在使用变量时,要在变量前面加"$"符号。例如,定义一个变量NAME,其值为Tom,在输出时,要以$NAME的形式输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LziVHiYS-1624693127827)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626123226891.png)]

Shell还支持连续输出多个变量的值,例如,再定义一个变量AGE,其值为23,然后同时输出变量NAME与AGE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMJcYAhH-1624693127828)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626123406612.png)]

在定义本地变量时,还可以使用read命令从标准输入中读取变量值,其中read的-p选项可以设置输入提示信息

read -p"please input an int number:" INTNUM

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADXODORo-1624693127829)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626123715284.png)]

删除变量的值可以使用unset命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qbcu5DuH-1624693127829)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626123759511.png)]

使用unset命令后,在输出该变量时值不再显示

环境变量

  • 环境变量的定义与清除

    环境变量在Shell编程和Linux系统管理方面都起着非常重要的作用,它一般用来存储路径列表,这些路径可用于搜索可执行文件、库文件等。环境变量定义格式如下所示

  export ENVIRON_VARIABLE=value

环境变量必须要export关键字导出,export关键字的作用是声明次变量为环境变量,例如,定义APPSPATH变量并赋为/usr/local,然后利用export将APPSPATH声明为环境变量

在命令行中使用export定义的环境变量只在当前Shell与子Shell中有效,Shell重启后这些环境变量将丢失。

使用env命令可以查看所有的环境变量,包括用户自定义的环境变量。

  env

删除环境变量和删除本地变量的方式相同,也是调用unset命令

  • 几个重要的环境变量

    bath中预设了很多环境变量,其中有几个比较重要的环境变量,Linux系统及诸多应用程序的正常运行都依赖它们。

    • PATH

      PATH是Linux中极为重要的环境变量,它用于帮助Shell找到用户所输入的命令。用户输入的每个命令都是一个可执行的程序,计算机执行这个程序以实现这个命令的功能。可执行程序存在于不同目录下,PATH变量就记录了这一系列的目录列表

    • PWD和OLDPWD

      PWD记录当前的目录路径,当利用cd命令切换到其他目录时,系统自动更新PWD的值,OLDPWD保存记录旧的工作目录。

    • HOME

      HOME记录当前用户的家目录

    • SHELL

      SHELL的变量值是/bin/bash,表示当前的Shell是bash。如果有必要使用其他Shell,则需要SHELL变量的值

    • USER和UID

      USER和UID是用于保存用户信息的环境变量,USER保存已登录用户的名字,UID则保存已登录用户的ID。

    • PS1和PS2

      PS1和PS2成为提示符变量,用于设置提示符格式。例如"[root@VM-0-5-centos ~]#"就是Shell提示符,[]里包含了当前用户名、主机名和当前目录等信息,这些信息并不是一成不变的,可以通过PS1和PS2的设置而改变

      PS1用于设置一级Shell提示符,也称为主提示符。使用echo命令查看PS1的值

      [root@VM-0-5-centos ~]# echo $PS1
      [\u@\h \W]\$
      

      由以上的输出结果可知,变量PS1包含4项内容,这4项内容的含义分别如下:

      • \u表示当前用户名
      • \h表示主机名
      • \w表示当前目录名
      • $是命令提示符,普通用户是$符号,如果是root用户,命令提示符是#符号

      PS2用于设置二级Shell提示符,使用echo命令查看PS2的值,其结果如下:

      [root@VM-0-5-centos ~]# echo $PS2
      >
      

      PS2的值为>符号,当输入命令不完整时,将会输入二级提示符

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6rY9LJP-1624693127830)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626153802588.png)]

  • 环境变量的配置文件

Linux中环境变量包括系统级和用户级,系统级的环境变量对每个用户都有效,而用户级的环境只对档期啊你用户有效。环境变量的配置文件也分为系统级和用户级,系统级的文件有很多,例如/etc/profile、/etc/profile.d、/etcbashrc、/etc/environment,在这些文件中定义的环境变量对所有用户都是永久有效的。用户级的环境变量配置文件主要是.bash_profile和.bashrc两个文件,它们位于用户的家目录下。

位置变量

位置变量主要用于接收传入Shell脚本的参数,因此位置变量也被称为位置参数。位置变量的名称由"$"与整数组成,命名规则如下所示

$n

$n用于接收传递给Shell脚本的第n个参数,如变量$1接收传入脚本的第一个参数。当位置变量名中的整数大于9时,需使用{}将其括起来,如脚本中的第11个位置参数应表示为${11}。位置便令是Shell中唯一全部使用数字命名的变量。需要主要的是,n是从1开始的,$0表示脚本自身的名称

编写test.sh脚本,内容如下:

#!/bin/bash

echo "The Script's name is : $0"
echo "Parameter #1: $1"
echo "Parameter #2: $2"
echo "Parameter #3: $3"
echo "Parameter #4: $4"
echo "Parameter #5: $5"
echo "Parameter #6: $6"
echo "Parameter #7: $7"
echo "Parameter #8: $8"
echo "Parameter #9: $9"
echo "Parameter #10: ${10}"

执行脚本并且传参

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEX1Cdgz-1624693127831)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626151041903.png)]

在接受参数时,位置变量值根据位置来接受响应参数,比如修改脚本为

#!/bin/bash

echo "The Script's name is : $0"
echo "Parameter #8: $8"

修改后的脚本只保留一个第8个位置的变量,再次执行这个脚本还是传递10个参数,结果如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYvfCfvV-1624693127831)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626151148281.png)]

在纳入的参数中,第8个位置是h,$8读取到了相应位置的参数。如果传入的参数不足8个,那么$8为空。

特殊变量

除了上述几个变量之外,Shell还定义了一些特殊变量,主要用来查看脚本的运作信息

Shell中常用的特殊变量如下所示

  • $#:传递到脚本的参数数量

  • $*和$@:传递到脚本的所有参数

  • $?:命令退出状态,0表示正常退出,非0表示异常退出

  • $$:表示进程的PID

    修改test.sh,增加几行代码,如下所示

#!/bin/bash

echo "The Script's name is : $0"
echo "Parameter #1: $1"
echo "Parameter #2: $2"
echo "Parameter #3: $3"
echo "Parameter #4: $4"
echo "Parameter #5: $5"
echo "Parameter #6: $6"
echo "Parameter #7: $7"
echo "Parameter #8: $8"
echo "Parameter #9: $9"
echo "Parameter #10: ${10}"

#新增代码

echo "Parameter count:$#"
echo "All Parameter:$*"
echo "All Parameter:$@"
echo "PID:$$"

运行结果为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkDfJKsU-1624693127832)(C:\Users\wzs\AppData\Roaming\Typora\typora-user-images\image-20210626152808502.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天地神仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值