承接上一篇整理文章 <<Shell 基础知识整理02>>
11. Shell 几点说明
-
Shell 为弱类型语言,默认情况下,bash Shell 不会区分变量类型,例如:常见的变量类型为整数、字符串、小数等,这和其他强类型语言(如 Java/C 语言)有所区别。当然可以通过
declare
显示定义的变量类型 -
Shell 变量分为:环境变量(全局变量) 和普通变量(局部变量)
- 环境变量也可以成为全局变量,可以在创建它们的 Shell 及其派生出的任意子进程 Shell 中使用,环境变量又可以分为自定义环境变量和 bash 内置的环境变量
- 普通变量也可以称为局部变量,只能在创建它们的 Shell 函数或 Shell 脚本中使用。
12. 三个可以显示变量的命令
set
: 输出所有变量和局部变量env
: 只显示全局变量declare
: 输出所有的变量、函数、整数和已经导出的变量
set -o
显示 Bash shell 所有参数配置信息
13. 设置环境变量(全局变量)的三种方法
- export 变量名=value
- 变量名=value; export 变量名
- declare -x 变量名=value
14. 自定义全局变量
编辑配置文件
vim /etc/profile
export 变量名=value
source /etc/profile # 或 . /etc/profile
echo $变量名
env|grep 变量名
15. 使环境变量永久生效的常用设置文件
(1)用户的环境变量配置
ls /root/.bashrc
ls /root/.bash_profile
(2)全局环境变量的配置
常见的全局变量环境的配置文件如下:
/etc/profile
/etc/bashrc # 在此文件中推荐优先设置
/etc/profile.d/
若要在登录后初始化后显示加载内容,则把脚本文件放在 /etc/profile.d/
下即可
16. 设置登录提示的两种方式
第一种,在 /etc/motd
里增加提示的字符串
# cat /etc/motd
wlcome to linux
登陆后显示:
Last login: Thu Oct 18 20:59:56 2018 from 125.88.24.74
welcome to linux
第二种, 在 /etc/profile.d/ 下面增加脚本
# cat /etc/profile.d/hello.sh
# echo "welcome to linux"
登陆后显示内容如上。
在 Java 生产环境中, 自定义环境变量的示例:
export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN_HOME=/application/resin
17. 显示与取消环境变量
- 通过 echo 或 prinf 打印环境变量
# echo $HOME
# echo $UID
# echo $PWD
# echo $SHELL
# echo $USER
# printf "$HOME\n"
- 使用 env 或 set 显示默认的环境变量
- 使用
unset
消除本地变量和环境变量
# echo $USER
# echo unset USER
# echo $USER
18. 环境变量初始化与对应文件的生效顺序
在登录 Linux 系统并启动一个 bash shell 时,默认情况下 bash 会在若干个文件中查找环境变量的设置。这些文件可以统称为系统环境文件,bash 检查的环境变量的情况取决于系统运行 Shell 的方式。系统运行 Shell 方式一般有 3 种:
1)通过系统用户登陆后默认运行 Shell
2)非登录交互式运行 Shell
3)执行脚本运行非交互式 Shell
当用户登录时,登录 Shell 加载环境的顺序如下
如果用户的 Shell 不是登录时启动的,那么这种非登录 Shell 只会加载 $HOME/.bashrc
并会去找 /etc/bashrc
。所以,如果希望在非登录 Shell 下也可以读取到设置的环境变量等内容,就需要将变量设定等写入 $HOME/.bashrc
或者 /etc/bashrc
, 而不是 $HOME/.bash_profile
或 /etc/profile
。
19. 定义本地变量
本地变量只在用户当前 Shell 生存期中使用。当在 Shell 中启动另一个进程时或退出,则刚设定的变量将会无效。
1.普通变量定义
变量名=value
变量名='value' # 常用于显示纯字符串
变量名="value" # 常用于
- 在 Shell 中定义变量名及为变量内容赋值的要求、
变量一般由字母、数字、下划线组成。开头可以以字母或下划线开头。
3.普通变量定义以及输出示例
a=192.168.1.2
b='192.168.1.2
c="192.168.1.2"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
20. 将命令的结果作为变量的内容赋值的方法
获取命令结果作为变量的两种方式:
- 变量名= `ls`
- 变量名=$(ls)
21. 常用的特殊位置参数变量说明
$0
获取当前执行的 Shell 脚本的文件名$n
获取当前的 Shell 脚本的第 n 个参数值$#
获取当前执行的 Shell 脚本后面连接的参数的总个数$*
获取当前 Shell 脚本的所有传参的参数$@
获取当前 Shell 脚本的所有传参的参数
注: 注意$@
与$*
的区别,当不加双引号时,两者无区别;当加双引号时,"$*"
将参数视为独立字符,相当于 "$1 $2 $3..."
; "$@"
将参数视为不同的独立字符串,相当于 "$1", "$2"...
22. 获取脚本的路径与名称
# cat n.sh
echo $0
# sh n.sh
n.sh
---------------
# cat /server/scripts/n.sh
dirname $0
basename $0
# sh /server/scripts/n.sh
/server/scripts/n.sh
n.sh
23. Shell 进程变量的特殊状态变量说明
$?
获取执行上一个指令的执行状态值(0成功,非零则失败)$$
获取当前执行的 Shell 脚本的进程号(PID)$!
获取上一个在后台工作的进程的进程号(PID)$_
获取在此之前的命令或执行脚本的最后一个参数