Shell基础 Chapter2:变量

变量

1 系统变量

HOME:当前用户家目录
[root@master ~]# echo $HOME
/root
[root@master ~]#

PWD:当前用户
[root@master data]# echo $PWD
/data

SHELL:当前解析器
[root@master data]# echo $SHELL
/bin/bash

USER:当前用户
[root@master data]# echo $USER
root

2 自定义变量

  1. 简单定义, 变量=值
[root@master data]# a=1
[root@master data]# echo $a
1

  1. 撤销变量,用 unset 变量名
[root@master data]# unset a
[root@master data]# echo $a

[root@master data]#

  1. 定义静态变量,用 readonly 变量名=值,变量只读,且不能被unset,生命周期和虚拟机进程一样
[root@master data]# readonly a=8
[root@master data]# echo $a
8

[root@master data]# a=4
-bash: a: 只读变量
[root@master data]# unset a
-bash: unset: a: 无法反设定: 只读 variable
  1. 变量定义规则
.	变量名由数字、字母、下划线组成,不能数字开头,环境变量名建议全大写
.	等号两侧都不能有空格
.	变量的值如果有空格,需要用单引号或者双引号括起来
.	在bash中变量默认类型都是字符串类型,无法直接进行数值计算
[root@master data]# b = 1
bash: b: 未找到命令...
[root@master data]# b= 1
bash: 1: 未找到命令...
[root@master data]# b =1
bash: b: 未找到命令...
[root@master data]# b=1
[root@master data]# b=1+1
[root@master data]# echo $b
1+1
[root@master data]# b=hello world
bash: world: 未找到命令...
[root@master data]# b="hello world"
[root@master data]# echo $b
hello world

  1. 将变量提升为全局环境变量,用export 变量名
[root@master data]# lan=java
[root@master data]# vim test.sh
[root@master data]# cat test.sh
echo hello
echo $lan
[root@master data]# sh test.sh
hello

[root@master data]# export lan
[root@master data]# sh test.sh
hello
java

  1. 查看指定变量,可先用set查看所有变量,然后用grep筛选
[root@master data]# my_language=java
[root@master data]# set | grep my_language
my_language=java

3 特殊变量

  1. $n
n为数字,0表示该脚本名称,$1-$9表示第一到第九个参数,从第十个开始需要用{}才能正常显示
[root@master data]# vim test.sh
[root@master data]# cat test.sh
echo $0
echo $1
echo ${10}
[root@master data]# sh test.sh 1 2 3 4 5 6 7 8 9 10
test.sh
1
10

[root@master data]# ./test.sh 1
./test.sh
1

[root@master data]# test.sh 1
./test.sh
1

[root@master data]#

  1. $#
用来获取输入参数的总个数,常用于循环
[root@master data]# cat test.sh
echo $0
echo $1
echo ${10}
echo $#
[root@master data]# sh test.sh 1 2 3 3 4
test.sh
1

5
[root@master data]#

  1. $* 、 $@
当没有双引号包含这两个的时候,都是将接收到的每个参数看作一份数据,彼此之间以空格分隔
当有双引号包含时,$*是将接收到的所有参数当作一个整体,以空格分隔每个参数,而$@还是将每个参数看作一份数据
这里不能是单引号,否则返回$* 和 $@
[root@master data]# cat test.sh
for i in $*
do
        echo $i
done

echo ----------------------------------

for i in $@
do
        echo $i
done

echo ---------------------------------

for i in "$*"
do
        echo $i
done

echo ---------------------------------

for i in "$@"
do
        echo $i
done
[root@master data]#

[root@master data]# sh test.sh 1 2 3
1
2
3
----------------------------------
1
2
3
---------------------------------
1 2 3
---------------------------------
1
2
3
[root@master data]#

[root@master data]# cat test.sh
for i in '$@'
do
        echo $i
done

echo ------------------------------

for i in '$*'
do
        echo $i
done
[root@master data]# sh test.sh 1 2
$@
------------------------------
$*

  1. $? 返回上一条命令执行的返回状态,如果正确执行,返回0,如果非0,则证明上一个命令执行有误
[root@master data]# echo $PWD
/data
[root@master data]# echo $?
0
[root@master data]# $PWD
-bash: /data: 是一个目录
[root@master data]# echo $?
126
[root@master data]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术.人生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值