变量的定义和使用
变量类型
强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误;
弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用;
变量命名法则: 1、不能使程序中的保留字:例如if, for; 2、只能使用数字、字母及下划线,且不能以数字开头; 3、见名知义,
bash中的变量的种类: 根据变量的生效范围等标准: 本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效; 环境变量:生效范围为当前shell进程及其子进程; 局部变量:生效范围为当前shell进程中某代码片断(通常指函数); 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;
特殊变量:$?, $0, $*, $@, $#
本地变量: 变量赋值:name='value' 可以使用引用: value: (1) 可以是直接字串; name="username" (2) 变量引用:name="$username" (3) 命令引用:name=`COMMAND`, name=$(COMMAND) 变量引用:${name}, $name "":弱引用,其中的变量引用会被替换为变量值; '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串; 显示已定义的所有变量 set 销毁变量:
unset name
环境变量: 变量声明、赋值: export name=VALUE declare -x name=VALUE 变量引用:$name, ${name} 显示所有环境变量: export env printenv 销毁: unset name bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1
只读变量: readonly name declare -r name
位置变量: 在脚本代码中调用通过命令行传递给脚本的参数; $1, $2, ...:对应调用第1、第2等参数; shift [n] $0: 命令本身; $* : 传递给脚本的所有参数; $@: 传递给脚本的所有参数; $#: 传递给脚本的参数的个数; 示例:判断给出的文件的行数 #!/bin/bash linecount="$(wc -l $1| cut -d' ' -f1)" echo "$1 has $linecount lines."
bash的配置文件:
按生效范围划分,存在两类: 全局配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置: ~/.bash_profile ~/.bashrc
按功能划分,存在两类: profile类:为交互式登录的shell提供配置 全局:/etc/profile, /etc/profile.d/*.sh 个人:~/.bash_profile 功用: (1) 用于定义环境变量; (2) 运行命令或脚本; bashrc类:为非交互式登录的shell提供配置 全局:/etc/bashrc 个人:~/.bashrc 功用: (1) 定义命令别名; (2) 定义本地变量;
shell登录: 交互式登录: 直接通过终端输入账号密码登录; 使用“su - UserName”或“su -l UserName”切换的用户
加载流程 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc //晚加载的会覆盖掉先加载的相同变量
非交互式登录: su UserName 图形界面下打开的终端 执行脚本
加载流程
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置的生效方式: (1) 重新启动shell进程; (2) 使用source或.命令进程