bash变量类型

bash变量类型

变量:内存单元的编号,一段内存空间。
变量类型的作用:事先确定数据存储格式和长度,整型和字符型,存储格式和长度都不一样。
强类型:变量使用前必须声明,初始化 如C语言。
弱类型:变量用时不用声明,不区分类型,bash默认为字符串。

环境变量(全局变量):

在Linux中,内置了一些环境变量如:HOME,PATH,SHELL,UID,GID,HOSTNAME等,可以通过命令env显示所有的环境变量。

定义环境变量:
用户也可以根据自己的需要定义自己的环境变量(全局变量),定义环境变量的方法:

export  variable_name=value
#or
variable_name=value
export  variable_name

对环境变量进行操作:

可以使用echo对环境变量进行显示

[root@localhost ~]# export  variable_name=value
[root@localhost ~]# echo $variable_name
value

利用env,显示所有的环境变量

[root@localhost ~]# env
XDG_SESSION_ID=3052
HOSTNAME=localhost
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
等等............

清除环境变量unset

[root@localhost ~]# unset variable_name
[root@localhost ~]# echo $variable_name

[root@localhost ~]#

只读变量 readonly
[root@localhost ~]# bash
[root@localhost ~]#
[root@localhost ~]# users=100
[root@localhost ~]# readonly users
[root@localhost ~]# user=1
[root@localhost ~]# echo $users
100

查看当前shell中的环境变量:
printenv
env
export

作用域为当前shell进程及其子进程

[root@localhost ~]# echo $HOSTNAME
localhost
[root@localhost ~]# pstree
systemd─┬─abrt-watch-log
        ├─abrtd
        ├─acpid
        ├─2*[agetty]
        ├─aodh-evaluator:───aodh-evaluator:───12*[{aodh-evaluator:}]
        ├─aodh-notifier: ───aodh-notifier: ───2*[{aodh-notifier: }]
        ├─atd
        ├─auditd───{auditd}
        ├─beam─┬─erl_child_setup───inet_gethost───inet_gethost
        │      └─64*[{beam}]
        ├─ceilometer-poll───ceilometer-poll───4*[{ceilometer-poll}]
        ├─cinder-api───cinder-api
        ├─cinder-backup───cinder-backup
        ├─cinder-schedule
        ├─cinder-volume───cinder-volume───sudo
        ├─crond
        ├─dbus-daemon
        ├─dmeventd───2*[{dmeventd}]
        ├─epmd
        ├─gnocchi-metricd───4*[gnocchi-metricd───2*[{gnocchi-metricd}]]
        ├─gnocchi-statsd───{gnocchi-statsd}
        ├─lsmd
        ├─lvmetad───{lvmetad}
        ├─master─┬─pickup
        │        └─qmgr
        ├─memcached───6*[{memcached}]
        ├─2*[monitor───ovsdb-server]
        ├─monitor───ovn-northd
        ├─mysqld───37*[{mysqld}]
        ├─ntpd
        ├─ovs-vswitchd
        ├─ovsdb-server
        ├─polkitd───6*[{polkitd}]
        ├─redis-server───2*[{redis-server}]
        ├─rngd
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─smartd
        ├─sshd─┬─sshd───bash───pstree
        │      ├─sshd───sftp-server
        │      ├─sshd───sshd
        │      └─2*[sshd]
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─xinetd

脚本在执行时,会启动一个子shell进程,命令行启动的脚本会继承当前shell环境变量,而系统自动执行脚本(非命令行启动)就需要自我定义需要的环境变量。

本地变量(局部变量)

bash是一个程序,使用bash与系统交互,此时bash是一个进程

变量的引用: ${varname},大括号可以省略,变量不会继承给子shell,作用域是当前整个bash进程

[root@localhost ~]# users=100
[root@localhost ~]# echo ${users}
100
[root@localhost ~]# echo $users
100
[root@localhost ~]# bash
[root@localhost ~]#
[root@localhost ~]# echo $users

使用单引号,强引用,变量不可替换
使用双引号,弱引用,变量可替换

[root@localhost ~]# users=100
[root@localhost ~]# echo $users
100
[root@localhost ~]# echo "This system useris $users"
This system useris 100
[root@localhost ~]# echo 'This system useris $users'
This system useris $users

位置变量

运行Shell脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收。例如: $1 表示第一个参数, $2 表示第二个参数,依次类推。

如果参数个数达到或者超过了10个,那么就得用 ${n} 的形式来接收了,例如: ${10} 、 ${23} 。 {} 的作用是为了帮助解释器识别参数的边界,这跟使用变量时加 {} 是一样的效果。

$1$2$3……$n

特殊变量

$0:当前脚本的文件名。
$#:传递给脚本或函数的参数个数。
$*:传递给脚本或函数的所有参数。当被双引号""包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
$@:传递给脚本或函数的所有参数。当被双引号""包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
$?:上个命令的退出状态,或函数的返回值。
$$:当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。

$?:上一个命令执行状态的返回值

bash程序执行有两类返回值

1、程序执行结果。

2、程序执行后状态返回值(0-255),返回值0为正确执行,否则错误执行。

[root@localhost ~]# useradd user1
useradd: user 'user1' already exists
[root@localhost ~]# echo $?
9
[root@localhost ~]# useradd user10
[root@localhost ~]# echo $?
0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值