linux shell 入门学习笔记7 父子shell面试题

1. 不同的执行方式,不同的shell环境
  1. 每次调用bash/sh解释器执行脚本都会开启一个子shell,因此不保留当前shell变量,通过pstree命令检查进程树
  2. 调用source是当前环境加载脚本,因此保留变量
    例子:
xiao123@xiao123:~/Downloads$ echo "name=大西瓜" > make_vars.sh
xiao123@xiao123:~/Downloads$ cat make_vars.sh
name=大西瓜
xiao123@xiao123:~/Downloads$ chmod +x make_vars.sh
xiao123@xiao123:~/Downloads$ bash ./make_vars.sh
xiao123@xiao123:~/Downloads$ echo ${name}

xiao123@xiao123:~/Downloads$ echo $name

xiao123@xiao123:~/Downloads$ source ./make_vars.sh
xiao123@xiao123:~/Downloads$ echo ${name}
大西瓜
xiao123@xiao123:~/Downloads$ echo $name
大西瓜
xiao123@xiao123:~/Downloads$
2.shell变量面试题

问,如下输入什么内容

xiao123@xiao123:~/Downloads$ echo 'user1=`whoami`' > test.sh
xiao123@xiao123:~/Downloads$ cat test.sh
user1=`whoami`
xiao123@xiao123:~/Downloads$ sh test.sh
xiao123@xiao123:~/Downloads$ echo $user1
A.当前用户
B.超哥
C.空

答案:C

环境变量设置

环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境、保证shell命令的正确执行。
shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。
环境变量可以在命令行中临时创建,但是用户推出shell终端,变量即丢失,如要永久生效,需要修改环境变量配置文件。

  • 用户个人配置文件 ~/.bash_profile~/.bashrc远程登陆用户特有文件
  • 全局配置文件/etc/profile/etc/bashrc,且系统建议最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户。

检查系统环境变量的命令

  • set,输出所有变量,包括全局变量、局部变量
  • env,只显示全局变量
  • declare,输出所有变量,如同set
  • export,显示和设置环境变量值

撤销环境变量

  • unset 变量名,删除变量或函数

设置只读变量

  • readonly,只有shell结束,只读变量失效
xiao123@xiao123:~/Downloads$ readonly name='xiao'
xiao123@xiao123:~/Downloads$ name=123
-bash: name: readonly variable
xiao123@xiao123:~/Downloads$
环境变量初始化于加载顺序
  1. shell登录Linux后,系统启动一个bash,shell bash会读取若干个系统环境文件,检查环境变量设置。
  2. /etc/profile:全局环境变量文件;为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。
  3. 然后读取/etc/profile.d目录下的脚本,有系统诸多脚本,也放入自定义需要登录加载的脚本,便于用于登录后立即运行脚本。
  4. 运行$HOME/.bash_profile(用户环境变量文件)。
  5. 运行$HOME/.bashrc。
  6. 等等
  7. 运行/etc/bashrc。

注意:
1.每个用户都有自己的环境变量配置文件,~/.bash_profile ~/.bashrc,且以个人配置文件优先加载变量,读取,以个人优先生效。
2.当你需要给所有用户都是用某个变量,写入全局即可/etc/profile。

set 命令

set命令能够找到当前的shell环境中的所有变量,以及包括局部变量(sh脚本文件中定义的变量)
展示:
set

env命令

env命令输出当前shell环境中的全局变量。
展示:
env

declare 命令

declare命令等同于set命令。
展示:
declare
定义变量值为大小写

xiao123@xiao123:~/Downloads/shscripts$ cat declare_test.sh
#!/bin/bash

declare -l lower
declare -u upper

lower="QWERTYui"
upper="ASDFGHjk"

echo "lower: ${lower}"
echo "upper: ${upper}"
xiao123@xiao123:~/Downloads/shscripts$ ./declare_test.sh
lower: qwertyui
upper: ASDFGHJK
xiao123@xiao123:~/Downloads/shscripts$
export命令

export查找和设置环境变量的值。
展示:
export

unset命令

unset删除撤销一个变量。

readonly命令

readonly声明变量只读,当前shell结束,该变量只读就失效。

找出当前系统中的环境变量
awk

bash多行命令执行
xiao123@xiao123:~/Downloads$ ls;cd ../;cd -;ls;
make_vars.sh  test.sh
/home/xiao123/Downloads
make_vars.sh  test.sh
xiao123@xiao123:~/Downloads$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值