Shell 基础知识整理 02

承接上一篇整理文章 <<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. 显示与取消环境变量

  1. 通过 echo 或 prinf 打印环境变量
# echo $HOME
# echo $UID
# echo $PWD
# echo $SHELL
# echo $USER
# printf "$HOME\n"
  1. 使用 env 或 set 显示默认的环境变量
  2. 使用 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"  # 常用于
  1. 在 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)
  • $_ 获取在此之前的命令或执行脚本的最后一个参数

猜你喜欢

转载自blog.csdn.net/qq_36148847/article/details/83213523