Shell编程基础(二)变量与正则表达式

本文深入探讨Shell编程中的变量使用,包括自定义变量、环境变量、位置变量和预定义变量,详细阐述了不同类型的引号及命令替换。同时,介绍了正则表达式在数据过滤中的应用,讲解了grep命令及其选项,以及正则表达式的各种规范。此外,还讨论了算术运算,包括整数运算和bc命令在进行小数运算和进制转换时的使用。
摘要由CSDN通过智能技术生成

Shell中引号的使用

        Shell中支持的引号:””(双引号)、’’(单引号)、··(反引号)

单引号与双引号

        作用:将字符串作为一个整体。

        如我们创建文件时:

#不使用引号时,将创建3个文件

[root@localhost test]# touch a b c

[root@localhost test]# ls -l

total 0

-rw-r--r-- 1 root root 0 Aug 31 09:57 a

-rw-r--r-- 1 root root 0 Aug 31 09:57 b

-rw-r--r-- 1 root root 0 Aug 31 09:57 c

#使用引号则将a b c作为一个文件的文件名

[root@localhost test]# touch "a b c"

[root@localhost test]# ls -l

total 0

-rw-r--r-- 1 root root 0 Aug 31 09:57 a

-rw-r--r-- 1 root root 0 Aug 31 09:57 a b c

-rw-r--r-- 1 root root 0 Aug 31 09:57 b

-rw-r--r-- 1 root root 0 Aug 31 09:57 c

        双引号与单引号的区别:

        单引号可以屏蔽特殊符号,将特殊符号的特殊含义屏蔽,转化为字符表面的含义,不能解析变量。

# ‘#’号在Shell中为单行注释的标志,直接echo输出则#及后面的内容不会被执行

[root@localhost test]# echo #lsk



[root@localhost test]# echo "#ls"

#ls

[root@localhost test]# echo '#ls'

#ls

# 定义变量,直接echo输出及使用双引号,变量将被解析,使用单引号不能解析

[root@localhost test]# test="Hello World"

[root@localhost test]# echo $test

Hello World

[root@localhost test]# echo "$test"

Hello World

[root@localhost test]# echo '$test'

$test

# 使用\将$符进行转义,$转移为普通字符

[root@localhost test]# echo "\$test"

$test

[root@localhost test]# echo \$test

$test

反引号

        反引号是一个命令替换符号,它可以使用命令的输出结果替代命令。

# 使用反引号将date命令的输出结果作为备份文件名的一部分

[root@localhost test]# tar -zcf log-`date +"%Y-%d-%m"`.tar.gz /var/log/

tar: Removing leading `/' from member names

[root@localhost test]# ls

a  a b c  b  c  log-2021-31-08.tar.gz

# 使用反引号将统计登录系统账户数作为值赋给变量

[root@localhost test]# userTotal=`who | wc -l`

[root@localhost test]# echo $userTotal

2

 

$()组合符号与反引号的功能相同

[root@localhost test]# echo "当前系统账户登录数量为:$(who | wc -l)"

当前系统账户登录数量为:2

[root@localhost test]# echo "当前系统账户登录数量为:$(who | wc -l)"

当前系统账户登录数量为:2

[root@localhost test]# ping -c2 $(hostname)

PING localhost (127.0.0.1) 56(84) bytes of data.

64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms

64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms



--- localhost ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1002ms

rtt min/avg/max/mdev = 0.015/0.027/0.039/0.012 ms

 

Shell变量

Shell中变量的类型有:

  1. 自定义变量:用户自主设置的变量
  2. 环境变量:变量名通常大写,有操作系统维护
  3. 位置变量:bash内置变量,存储脚本执行时的参数
  4. 预定义变量:bash内置变量,可以调用但是不能修改

自定义变量        

        用户自定义变量时,变量名的规则:变量名仅可以使用字母数字下划线组合,但是不能以数字开头。在实际定义时最好使用比较容易理解的单词或拼音,切记不要使用随意的字符作为变量名,没有规律的变量名会让脚本的可阅读性变得极差。

定义变量格式:

变量名=变量值

取消变量:

unset 变量名

注意:=号两边不能有空格,不要使用关键字作为变量名,如:ls、cd等。

# 定义变量时=号两边有空格时将报错

[root@localhost test]# var ="value"

-bash: var: command not found

[root@localhost test]# var= "value"

-bash: value: command not found

[root@localhost test]# var = "value"

-bash: var: command not found

# 自定义变量

[root@localhost test]# var="value"

# 输出变量

[root@localhost test]# echo $var

value

# 取消变量

[root@localhost test]# unset var

[root@localhost test]# echo $var



[root@localhost test]#

 

当输出变量时,变量名后面直接跟其他字母、数字或下划线时,需要使用{}将变量名括起来。

[root@localhost test]# money=999

[root@localhost test]# echo $money

999

#变量名后直接跟字母将无任何输出,moneyRMB将作为整个变量名,未定义

[root@localhost test]# echo $moneyRMB



# 使用{}分隔变量名及其他字符

[root@localhost test]# echo ${money}RMB

999RMB

[root@localhost test]# echo $money_RMB



[root@localhost test]# echo $money12RMB



[root@localhost test]# echo ${money}12RMB

99912RMB

[root@localhost test]# echo ${money}_RMB

999_RMB

[root@localhost test]# echo $money:RMB

999:RMB

[root@localhost test]# echo $money-RMB

999-RMB

 

环境变量

环境变量一般存储在/etc/profile或~/.bash_profile中,可以使用命令env查看所有环境变量。

 

常用的环境变量有:

  1. PATH:系统环境变量路径
  2. PWD:用户当前工作目录
  3. USER:当前登录系统的用户名
  4. UID:当前账号的UID
  5. HOME:当前用户的家目录
  6. SHELL:当前用户的SHEEL解释器
  7. RANDOM:返回0~32767之间的随机整数

位置变量

位置变量是存储脚本执行时的参数,使用$n表示,n为整数序列,n大于9是整数需使用{}号分隔,如:$1、$2...${11}、${12}...

[root@localhost test]# vim test.sh

#!/bin/bash

# 接收并输出位置变量



echo $1

echo $2

echo $2

[root@localhost test]# chmod +x test.sh

[root@localhost test]# ./test.sh 11 22 33

11

22

22

预定义变量

预定义变量用来保存脚本程序的执行信息。可以直接使用,但是不能修改及赋值。

常见的预定义变量表:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值