码迷,mamicode.com
首页 > 系统相关 > 详细

浅谈linux变量

时间:2016-08-12 21:46:56      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:变量

技术分享

1.什么是变量 

一句话:变量即在程序运行过程中它的值是允许改变的量。 



2.变量作用

1数据的存储格式

2参与的运算

3表示的数据范围



3.变量命名规则

1 命名要见名知意(命名的时候一定要注意,不能随便起用变量名,尽量不要出现像1,2,3,A,B等一些简单的字母或数字,一旦这个变量长时间不看,过来一段时间就不知当初为什么会定义这个变量了)

2 遵守命名规则(可以使用数字,下划线,字母作为命名,需要记住的是不能用数字作为变量名开头)

3 不能以程序中保留的字作为变量名(例如:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1)

4 使用“驼峰命名法”(小驼峰法:变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。大驼峰法:相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。)

#小驼峰命名法
[root@localhost ~]# dateUserName=liaoxz
#大驼峰命名法
[root@localhost ~]# DataUserName=liaoxz


4.变量种类

(1)本地变量

  • 本地变量定义:

变量名=变量值

[root@localhost ~]# user1=liaoxz
  • 变量调用

$变量名 ${变量名}

#使用echo查看变量
[root@localhost ~]# echo $user1
liaoxz
  • 取消变量

 #语法:
unset 变量名
[root@localhost ~]# unset user1 
[root@localhost ~]# user1
bash: user1: command not found...
  • 查看变量

 export 

 env 

 printenv

 set

[root@localhost ~]# export 
[root@localhost ~]# env
[root@localhost ~]# printenv
[root@localhost ~]# set
  • 本地变量的应用范围

#定义完后在本地直接查看,是可以调用的
[root@localhost ~]# user1=liaoxz
[root@localhost ~]# echo $user1
liaoxz
[root@localhost ~]# 
#新打开个终端再调用,没有查看到值
[root@localhost ~]# echo $user1
#下面以数状来查看下当前的进程
#pstree 进程查看工具,使用树状查看当前进程状态
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───{at-spi2-registr}
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─caribou───2*[{caribou}]
        ├─colord───2*[{colord}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon───{dbus-daemon}]
        ├─dbus-launch
        ├─dconf-service───2*[{dconf-service}]
        ├─dnsmasq───dnsmasq
        ├─firewalld───{firewalld}
        ├─gdm─┬─Xorg
        │     ├─gdm-session-wor─┬─gnome-session─┬─gnome-settings-───4*[{gnome-settings-}]
        │     │                 │               ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
        │     │                 │               │             │             ├─ibus-engine-sim───2*[{ibus-engine-si+
        │     │                 │               │             │             └─2*[{ibus-daemon}]
        │     │                 │               │             └─6*[{gnome-shell}]
        │     │                 │               └─3*[{gnome-session}]
        │     │                 └─2*[{gdm-session-wor}]
        │     └─3*[{gdm}]
        ├─2*[gdm───2*[{gdm}]]
        ├─goa-daemon───3*[{goa-daemon}]
        ├─goa-identity-se───2*[{goa-identity-se}]
        ├─gssproxy───5*[{gssproxy}]
        ├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
        ├─gvfs-goa-volume───{gvfs-goa-volume}
        ├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
        ├─gvfs-mtp-volume───{gvfs-mtp-volume}
        ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
        ├─gvfsd───{gvfsd}
        ├─ibus-x11───2*[{ibus-x11}]
        ├─ksmtuned───sleep
        ├─libvirtd───15*[{libvirtd}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─mission-control───2*[{mission-control}]
        ├─packagekitd───2*[{packagekitd}]
        ├─pulseaudio───2*[{pulseaudio}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd─┬─sshd───bash───pstree#这是当前使用的bash
        │      └─sshd───bash#这是我新开的一个连接终端,发现是新开启的一个bash。
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ├─udisksd───4*[{udisksd}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        └─wpa_supplicant
 #切换一下当前shell再使用echo查看变量
[root@localhost ~]# csh
[root@localhost ~]# echo $user1
user1: Undefined variable.
#切换shell后不能查看变量
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───{at-spi2-registr}
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─caribou───2*[{caribou}]
        ├─colord───2*[{colord}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon───{dbus-daemon}]
        ├─dbus-launch
        ├─dconf-service───2*[{dconf-service}]
        ├─dnsmasq───dnsmasq
        ├─firewalld───{firewalld}
        ├─gdm─┬─Xorg
        │     ├─gdm-session-wor─┬─gnome-session─┬─gnome-settings-───4*[{gnome-settings-}]
        │     │                 │               ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
        │     │                 │               │             │             ├─ibus-engine-sim───2*[{ibus-engine-si+
        │     │                 │               │             │             └─2*[{ibus-daemon}]
        │     │                 │               │             └─6*[{gnome-shell}]
        │     │                 │               └─3*[{gnome-session}]
        │     │                 └─2*[{gdm-session-wor}]
        │     └─3*[{gdm}]
        ├─2*[gdm───2*[{gdm}]]
        ├─goa-daemon───3*[{goa-daemon}]
        ├─goa-identity-se───2*[{goa-identity-se}]
        ├─gssproxy───5*[{gssproxy}]
        ├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
        ├─gvfs-goa-volume───{gvfs-goa-volume}
        ├─gvfs-gphoto2-vo───{gvfs-gphoto2-vo}
        ├─gvfs-mtp-volume───{gvfs-mtp-volume}
        ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
        ├─gvfsd───{gvfsd}
        ├─ibus-x11───2*[{ibus-x11}]
        ├─ksmtuned───sleep
        ├─libvirtd───15*[{libvirtd}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─mission-control───2*[{mission-control}]
        ├─packagekitd───2*[{packagekitd}]
        ├─pulseaudio───2*[{pulseaudio}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd─┬─sshd───bash───csh───pstree#新开的csh是属于bash子shell
        │      └─sshd───bash
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ├─udisksd───4*[{udisksd}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        └─wpa_supplicant

总结:本地变量只作用于当前的shell,在子shell进程和其他shell进程不生效,在当前shell终止的时候这个变量也就结束了他的使命。



(2)环境变量

  • 环境变量赋值

export 变量名=值

declare -x 变量名=值

[root@localhost ~]# declare user2=lxz
[root@localhost ~]# export user1=liaoxz
  • 变量调用

$变量名 ${变量名}

[root@localhost ~]# echo $user1
liaoxz
[root@localhost ~]# echo $user2
lxz
[root@localhost ~]#


  • 取消变量

 unset 变量名

[root@localhost ~]# unset user1 
[root@localhost ~]# user1
b
  • 查看变量

 export 

 env 

 printenv

 set

[root@localhost ~]# export |grep user1
declare -x user1="liaoxz"
[root@localhost ~]# env
[root@localhost ~]# printenv
[root@localhost ~]# set
  • 环境变量的应用范围

#在当前shell为bash定义一个环境变量
[root@localhost ~]#pstree
 ├─sshd─┬─sshd───bash───pstree
        │      └─sshd───bash
 
[root@localhost ~]# export user1=liaoxz
[root@localhost ~]# echo $user1
liaoxz
#在当前shell能查看,我再在此shell下新开一个子bash shell
[root@localhost ~]#bash
[root@localhost ~]#pstree
 
 ├─sshd─┬─sshd───bash───bash───pstree#在当前shell下新开了一个bash新进程
        │      └─sshd───bash
 [root@localhost ~]# echo $user1
liaoxz
#使用echo可查看
[root@localhost ~]# echo $user1
#在新开的终端中用echo查看不了

总结:环境变量应用于当前shell和其所有子shell,因为新开的终端是属于新的shell,所以,不是同一个父shell是不能作用的。

(3)只读变量-常量

  • 只读变量赋值

    declare -r 变量名=值

    readonly 变量名=值

  • 变量调用

  $变量名 ${变量名}

  • 查看变量

   export 

   env 

   printenv

   set

  • 只读变量的应用范围

 #只读不能删不能改程序退出不在生效
 [root@localhost ~]# readonly user4=ll
[root@localhost ~]# echo $user4
ll
[root@localhost ~]# unset user4
bash: unset: user4: cannot unset: readonly variable
#默认作用于当前shell,可以使用和环境比那里一起使用,作用与当前shell及其子shell

(4)位置变量

  • 位置变量定义

#位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1:对应第1参数,数字自定义,数字几就是第几参数
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异

#实例证明在后续【bash脚本用法】上传博客后指定链接

技术分享

浅谈linux变量

标签:变量

原文地址:http://snowbamboo1.blog.51cto.com/9291858/1837434

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!