标签:变量 bash
在介绍内容之前,我解释下排版问题,
第一分割线是基本介绍
第二分割线是细节和扩展内容
第三分割线是对细节内容的详细讲解以及实例
前面粗略介绍的后面会有详解
bash的重要特性:变量
bash变量的类别:
本地变量:只对当前shell进程有效的变量:对其他shell进程无效,包当前shell进程的子进程:
环境变量:对当前shell进程及其子shell有效,对其他的shell进程无效
局部变量:对shell脚本中某代码片段有效,通常用于函数本地
位置变量:使用bash 脚本时,命令后面跟着的参数位置
特殊变量:在bash中,有单独意义的特别变量(详情见下文扩展)
如 $?:上一个命令结束后的状态
变量定义:
定义本地变量:变量名=值
定义环境变量:export 变量名=值
对于已有的本地变量,改成环境变量:export 变量名 即可。
定义局部变量:local 变量名=值
撤销变量:unset 变量名
变量引用:
$ 变量名:可以引用变量的值
$ "变量名":(双引号) 弱应用,引用的是变量的值。
$ ‘变量名‘:(单引号) 强引用,引号中的字符不做变量替换,直接引用字符。
系统变量:
系统变量只是我自己叫的名字,实际就是bash配置文件中,永久生效的变量。上文中自己设置的变量,在退出shell的时候就会失效,要希望设置的变量永久生效就需要配置相关的配置文件。下文会介绍bash配置文件。这里只介绍系统一些常用变量:
PATH 决定了shell将到哪些目录中寻找命令或程序 (后文有详解)
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME
当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE
语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
相关命令:
查看当前shell进程中的所有变量
set:
查看当前shell进程中的所有环境变量
export
printenb
env
变量命名规则:
1、不能使用shell脚本程序中的关键子(保留字);
如:if,case,for
2、只能使用数字、字母和下划线,且不能以数字开头
3、要见名知义(额外要求)
细节和扩展
bash有许多内置的环境变量
$?:上一个程序结束状态返回值
$#:位置参数个数
$*:引用所有位置参数
$@:引用所有位置参数
$$:脚本的进程ID(PID)
$!:shell最后运行的后台Process的PID
常量:
readonly 变量:
只有shell进程终止,常量才能释放,不然无法修改
给变量默认值
varName=${varName;-value}
如果varName不空,则返回varName的值:否则,则返回value,(注意:varName并没有被赋值)
如果varName不空,则其值不变,否则,varName会使用value作为其值。
变量值类型:
变量类型:
不通的类型,不同的存储机制
1、存储机制
2、存储空间
3、参与的运算方式
数值型:
精确数值:整数
近似数据:浮点型
单精度浮点
双精度浮点
字符型:
char(单个字符)
string(字串)
布尔型:
ture,false
类型是可以转换:
显示转换:bash不支持
隐式转换:
bash是弱类型语言,一切皆字符
数字 18 :0001 0010
字符 18 : 1,8
ASCII:128常用字符,计算机最小存储单元字节 8bit
1:8bit
8:8bit
18:16bits
bash的配置文件
shell中命令行设置的变量,只要退出了当前shell就都会失效,要想变量永久有效,就需要配置bash的相关配置文件。
配置文件分为两类:
profile类:为交互式登陆的用户提供配置
全局:(对所有的用户都生效)
/etc/profile
/etc/profile.d/*.sh
某用户:(对某一用户生效)
~/.bash_profile
用户家目录隐藏文件
功用(一部分):
1、设定环境变量
2、运行命令或脚本
bashrc类:非交互式的用户提供配置
全局:
/etc/bashrc
某用户:
~/.bashrc
功用(部分):
1、设定本地变量
2、定义命令别名
登陆类型:
交互式:
直接通过终端输入账号和密码登陆
使用su -l USERNAME 或 su - USERNAME:
非交互式
su USERNAME
图形界面下打开的终端
执行脚本
通过编辑配置文件修改的配置生效
1、退出并重新登陆
2、让bash重读此文件
. FILE
source FILE
文件读取顺序:(后读取的会覆盖前面的)
交互登陆的用户
/etc/profile-->/etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc -->/etc/bashrc
非交互登陆的用户
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
细节详解
写一个bash脚本来加强理解:
建立脚本lab1.sh
vim lab1.sh
输入:
#!/bin/bash \\echo,是输出到默认标准输出也就是屏幕,#!/bin/bash 是固定格式
echo "number:$#" \\输出 number:$# 看结果输出了 number:5
echo "sename:$0" \\类同
echo "first:$1"
echo "second:$2"
echo "argume:$@"
echo "yoyoyo:$*"
保存退出;赋脚本权限
执行:
./lab1.sh 1 6 3 4 5
执行结果:
number:5 \\$# 等于5,也就是我们运行脚本的时候加了5个参数
sename:./lab1.sh \\$0 我们运行的命令名字是./lab1.sh
first:1 \\$1 等于1,第一个参数是1
second:6 \\$2 等于6,第二个参数是6
argume:1 6 3 4 5 \\$@ 将所有的参数列出来
yoyoyo:1 6 3 4 5 \\ $* 将所有的参数列出来
bash环境变量:PATH
#echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
当执行外部命令的时候,bash会到PATH里这些路径中去找对应的命令文件,去执行。
外部命令查找
bash查找命令的方式
外部命令查找:$PATH
第一次执行真正的查找操作:此命令使用行为会缓存
查看此缓存使用hash命令
本文出自 “键心通明” 博客,请务必保留此出处http://loveyp.blog.51cto.com/4450676/1633934
标签:变量 bash
原文地址:http://loveyp.blog.51cto.com/4450676/1633934