01 变量

本文介绍了Shell脚本中变量的定义、打印、清除及只读设置,展示了如何从键盘读取输入和使用环境变量。还探讨了命令如`read`、`echo`、`unset`、`readonly`和`env`的用法,并提到了变量命名规则。此外,讲解了命令行中双引号、单引号和反引号的作用,以及预设变量和特殊用法。最后,讨论了变量扩展功能,包括默认值设定、字符串操作等。
摘要由CSDN通过智能技术生成

变量定义简介

定义变量时,可直接为 变量名=变量值,使用 echo $变量名 (或 echo ${变量名})以打印变量至终端,使用 unset 变量名 可以清除变量值,可使用 readonly 变量名 指定只读变量,该变量无法修改,强行修改将会在执行结束后报错,程序仍会正常继续执行

#! /bin/bash
#这是第一个shell脚本

num=10
echo $num
unset num
echo $num
readonly num=100
echo $num
num=120
echo $num
echo $num
echo $num

运行结果:

xxx@PC:~$ ./first.sh

10

100

100

100

100

first.sh: 行 xx: num: 只读变量

xxx@PC:~$

使用 read 变量名 可以从键盘中输入变量,若需要添加输入提示信息,可添加 -p 参数,若需要同时读取多个变量,可使用空格隔开:

#! /bin/bash
#这是第一个shell脚本

num=10
echo  "num=$num"
read -p "请输入num的值:" num
echo "num=$num"
read data1 data2
echo "data1=$data1,data2=$data2"

运行结果:

xxx@PC:~$ ./first.sh

num=10

请输入num的值:120

num=120

114

514

data1=114,data2=514

xxx@PC:~$

使用命令 env 可以查看当前环境变量,expor 命令可将变量导出至全局供其它脚本使用,source 命令可进行终端时调用脚本(等同于. xxx.sh)或脚本内其它脚本的调用,被调用脚本不需要可执行权限:

xxx@PC:~$ env

***

系统环境变量

***

xxx@PC:~$ source demo.sh

xxx@PC:~$ env

***

系统环境变量

DATA=100

***

xxx@PC:~$

demo.sh文件中的内容:

#! /bin/bash
#这是第二个shell脚本

expor DATA=100

变量命名注意事项

1、变量名只能包含英文字母下划线,不能以数字开头

1_num=10 错误

num_1=20 正确

2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来

3、双引号 单引号的区别

双引号:可以解析变量的值,替换变量值输出

单引号:不能解析变量的值,当做纯文本输出

shell中预设的变量

$#

传递给shell脚本参数的数量

$*

传递给shell脚本参数的内容

$1、$2...

传递给shell脚本的参数

$?

命令执行后返回的状态

"$?"

检测上个命令师傅正常执行(0 为正常执行,非0 为执行异常)

$0

当前执行的进程名

$$

当前执行的进程号

"$$"

用作临时文件名保证临时文件名不重复

脚本标量特殊用法

""(双引号)

可以解析变量的值,替换变量值输出

''(单引号)

不能解析变量的值,当做纯文本输出

``(反引号)

中间的内容为系统命令,执行其中内容

\(转义字符)

等同于C语言中的转义字符,echo输出时需要加上 -e 参数

(命令序列)

由子shell完成,不影响父shell变量内容,类似于C语言中的函数内变量

{命令序列}

在当前shell中执行,会影响父shell变量内容

示例文件如下:

#! /bin/bash
num=10
echo "num=$num"
echo 'num=$num'
echo "today:`date`"
echo -e "hello\nworld"

(
    num=114514
    echo "()内num=$num"
)
echo "()外num=$num"

{
    num=114514
    echo "{}内num=$num"
}
echo "{}外num=$num"

运行结果:

xxx@PC:~$ ./first.sh

num=10

num=$num

today:2023年 03月 13日 星期一 11:18:21 CST

hello

world

()内num=114514

()外num=10

{}内num=114514

{}外num=114514

xxx@PC:~$

变量的扩展

#!/bin/bash

#${num:-val} 如果num存在,则值为num,否则为val
echo ${num:-100}
num=200
echo ${num:-100}

str="00123456789"
#测量字符串长度
echo "str长度为:${#str}"
#从下标为x处提取字符串
echo ${str:3}
#从下标为x处提取长度为y的字符串
echo ${str:3:6}
#${str/old/new}用new替换字符串中出现的第一个old,不会修改原str
echo ${str/0/9}
#${str//old/new}用new替换字符串中出现的全部old,不会修改原str
echo ${str//0/9}

运行结果:

xxx@PC:~$ ./first.sh

100

200

str长度为:11

23456789

234567

90123456789

99123456789

xxx@PC:~$

变量属性设置

在bash的内建命令中,declare可以指定变量的属性,也可以写作typeset。declare -i s 表示强制把s变量当做int型参数运算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值