文章目录
shell相关文件
# 查看系统支持的shell
cat /etc/shells
# 查看历史命令,每次登录注销后,会被保存在此文件中,注销前保存在内存中
cat ~/.bash_history
# 正常退出前会执行下面文件中的命令
cat ~/.bash_logout
shell命令行的编辑
ctrl+u # 删除光标之前的命令
ctrl+k # 删除光标之后的命令
ctrl+a # 光标移到命令行最前面
ctrl+e # 光标移到命令行最后面
shell的变量功能
变量的显示
echo $PATH
echo ${PATH}
变量的赋值
# 直接赋值1,不允许出现空格
myname=jiangxianqiang
# 直接赋值2,允许出现空格
myname="j x q"
# "$PATH"和'$PATH'的区别
a='$PATH'
b="$PATH"
echo ${a} --> $PATH
echo ${b} --> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# $(命令)或`命令`:可以在命令中使用其他命令,如
echo $(ls)
anaconda-ks.cfg pdump
# 取消变量
uset 变量名
# 从键盘给变量赋值
read [-pt] var
-p # 键盘输入前展示命令提示
-t # 等待键盘输入的超时时间
lread -p "please input " -t 30 myname
环境变量
变量和环境变量不是一个概念,父进程的变量子进程不能使用,父进程的环境变量子进程可以使用。
# 查看环境变量
env
export
# 普通变量转换成环境变量
export myname
env | grep myname -> myname=jiangxq
常见的环境变量
变量名 | 描述 |
---|---|
HOME | 用户的根目录 |
HISTSIZE | 历史命令最大数目 |
邮件相关 | |
PATH | 可执行文件查找的路径 |
LANG | 语系 |
RANDOM | 0~32767之间的随机数,随机数生成器/dev/random 0~9之间随机数:declare -i number=$RANDOM/32767*10;echo $number |
shell自身变量
除了临时变量和环境变量,还有bash自身变量,可以通过set或declare命令查看,用env或export看不到。下面是部分bash变量的含义
# PS1 命令行提示符,表示命令行开头显示的字符串
set | grep PS1
PS1='[\[\e[31m\]\u@\[\e[36m\]\h \w\[\e[37m\]]\[\e[33m\]\$\[\e[m\] '
\d: 显示日期
\H: 显示完整主机名
\h: 显示简化主机名
\t \T \A \@: 显示时间
\u: 显示账号名称
\v: 显示bash的版本
\w: 显示完整工作目录
\W: 显示简化工作目录
\#: 显示执行的第几个命令
\$: 显示提示符,root为#,非root为$
# $ 表示本shell的进程号,使用echo $$来查看
echo $$
25193
# ?表示上一条命令的返回结果,成功为0,失败则显示对应的错误码
echo $?
0
变量相关命令
read
read的作用是从键盘读取数值,赋值给变量,选项参数为:
read [-pt] var
-p # 键盘输入前展示命令提示
-t # 等待键盘输入的超时时间
使用举例:
read -p "please input " -t 30 myname
-> please input aaa
echo ${myname}
-aaa
declare
declare的作用是声明不通类型的变量。参数选项为:
declare [-aixr] var #变量/数组的声明或取消声明
# 不加选项,展示所有的变量
-a # 声明数组类型变量
-i # 声明整型变量
-x # 声明环境变量或将自定义变量转换成环境变量
-r # 声明只读变量
-p # 查看变量类型
+aixr # 取消变量的类型,取消的是变量的类型,而不是变量自身
使用举例
# 数组的声明和使用
decalre -a var #声明
arr[1]=1;arr[2]=2 #赋值方式1
arr=(1 2 3 4 5) #赋值方式2
echo ${arr[1]} #访问方式1
echo ${arr[*]} #访问方式2
#整型变量的声明和使用
declare -i xxxx=1 #声明
xxxx=${xxxx}+1 #操作
echo $xxxx
2
#类型的取消
declare +i xxxx
xxxx=${xxxx}+1
echo $xxxx
2+1
变量的应用
# 进入内核模块目录
cd /lib/modules/$(uname -r)/kernel
变量文件加载的顺序
login shell:完整流程登录,需要输入账号密码
non-login shell:非完整流程登录,如直接执行bash
login shell读取的配置文件的流程:
-
首先读取/etc/profile: 全局环境变量配置文件,export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL;并且设置了umask.调用了外部配置文件/etc/profile.d/*.sh,作用是定义bash的外观、功能等,如:
- /etc/profile.d/lang.sh,通过调用/etc/locale.conf,实现语系配置
- /etc/profile.d/bash_completion.sh,通过调用/usr/share/bash-completion/completions/*下的配置文件,实现命令补全
-
然后读取/.bash_profile或/.bash_login或~/.profile: 个人环境变量配置文件,哪个有读哪个,读到一个便结束,bash_profile做了两个事情:
-
- 读取~/.bashrc文件,.bashrc又去调用/etc/bashrc配置文件
- 将HOME/bin加入到PATH中
non-login shell读取的配置文件,仅读取~/.bashrc
shell命令识别的顺序
- 从alias中寻找
- 从bash的内置命令中寻找
- 通过$PATH变量的顺序寻找
shell登陆页面信息自定义
-
/etc/issue:用于自定义tty方式登录页面显示
-
/etc/issue.net:用于telnet方式登录页面显示
-
/etc/motd:message of today,用于公告今天的注意事项