一、变量分类
注意:shell中定义变量的时候 “=” 左右两边没有空格
普通变量
在命令行或脚本中定义的变量
环境变量
自定义环境变量
去定义自定义环境变量:export 或 declare
export 变量名=值
变量名=值
export 变量名
declare -x 变量名=值
如果定义变量的位置不同,那么它生效的位置也不同
永久环境变量:写在一些文件(开机会读取,ssh会读取,切换用户会读取的)
~/.bash_profile #用户家目录下:针对某一个用户
~/.bashrc #用户家目录下
#如果再这两个文件中定义了环境变量:那么只有这个用户可以访问得到,其他用户访问不到
#所有用户的共用文件
/etc/profile
/etc/bashrc
/etc/profile.d
#如果再着两个文件,以及再、etc/profile.d这个目录下定义的文件,针对所有用户
#这几个文件的关系
~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then #如果~/.bashrc存在,执行这个文件
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
~
vim ~./bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
#如果/etc/bashrc 文件存在,则执行这个文件
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
临时换将变量:临时定义,在命令行内或脚本定义(不会再次开机或者进行ssh链接或者切换用户啊的时候读取)
练习
1、为一个普通用户:shell_user 定义一个华宁变量:normal_user=normal变量定义在什么地方?
用户加目录下: .bash_profile 或者.bashrc
添加后直接获取不到:需要去使用source 或者 “.” 执行脚本,或者重新登陆
2、为所有用户定义一个华宁变量:all_ser=all变量定义在哪儿?
/etc/profile或者/etc/bashrc或者/etc/profile.d
3、为root用户定义一个环境变量 :root_user=root 变量定义再什么地方?
用户加目录下:.bashprofile或者.bashrc
系统环境变量
二、变量的命名
使用数字、字母、下划线给变量命名
不能以数字开头
可以给同一个变量复制多次,最后一次会覆盖之前的值
三、查看变量的值
1.查看单个变量的值
echo $变量名 或echo ${变量名}
printf "$变量名\n" 或 printf "{变量名}\n" 单引号会让引号内的所有字符失效,双引号保留$ \ 的含义
print打印 printf格式化打印
2.查看多个变量的值
set:查看所有的变量和函数
declare:查看所有的变量和函数
env:显示所有的全局变量
四、变量的定义
shell中定义的变量,不需要指定类型,也可以指定类型(比较薄弱)
[root@localhost shell_code]# temp=123;data=$temp;data2='$temp';data3="$temp"
[root@localhost shell_code]# echo $data $data2 $data3
123 $temp 123
双引号和单引号的区别:当负值时如果中间带有空格优选双引号
[root@localhost shell_code]# data=`pwd` //反引号:放的是命令,获取命令的执行结果
[root@localhost shell_code]# echo $data
/root/shell_code
[root@localhost shell_code]# data2=$(pwd) //和反引号作用相同,为了预防在某些场景中反引号有其他含义
[root@localhost shell_code]# echo $data2
/root/shell_code
[root@localhost shell_code]#
五、脚本传参
$# 命令行的参数个数
$0 当前脚本名称
$n 当前传递给脚本的第n个参数,$1:就表示代码传入的弟一个参数,$2:表示代码传入的第二个参数...
$@ 代表所有的参数:“参数1” “参数2” “参数3”....
$* 代表所有的参数:"参数1 参数2 参数3 ...."
$? 上一条命令执行完成的退出码:exit code
$$ 返回进程ID
使用循环:打印参数如果只打印了一个,说明是一个整体
六、取消变量
unset 变量
七、变量的运算
算数运算符:+,-,*,/,%,**
赋值运算符:=,+=,-=,/=,%=,**=
data=1,data = data + 1 ==> data +=1
自增和自减:data++,++data,data--,--data
符号在前以及符号再后的区别:在后先赋值再自增,在前先自增后赋值
位运算符:&(与),|(或),^(异或),~(取非),<<,>>
10: 2^3+2 -> 二进制从右到左 -> 依次是从低位到最高位:2^0,2^1,2^2……