内置变量及含义
- BASH
- bash的完整路径
- BASH_ENV
- bash非互动模式下,每次在执行shell脚本时会先检查BASH_ENV是否有指定文件,如果有先执行指定文件
- BASH_VERSION
- bash的版本
- CDPATH
- cd命令的搜索路径
- cd file #如果当前路径下不存在file目录,则由CDPATH中查找
- ENV
- bash互动模式下或者POSIX模式下,会先检查ENV是否有指定文件.如果有先执行指定文件
- EUID
- 有效使用者id
- FCEDITOR
- fc命令默认使用的比较器
- FIGNORE
- 在文件名补齐时会排除FIGNORE指定的文件扩展名.
- 在进行文件名补齐时,如若想忽略的扩展名列表.各文件名之间用:隔开,例如"~:.sh"
- FUNCNAME
- 在函数式执行期,此变量内容即为函数式的名称
1234function fun{echo $FUNCNAME #fun}
- 在函数式执行期,此变量内容即为函数式的名称
- GLOBIGNORE
- 做样式比较时,要想忽略的文件名列表.各文件名之间用:隔开
- GROUPS
- 这是一个数组变量,包含用户所属的组群列表
echo ${GROUPS[2]}
- HISTCMD
- 当前指令执行完后,它在历史指令中的排列编号
- HISTCONTROL
- 控制指令是否存入历史脚本文件中.该变量有三个可能的值
- ignorespace:凡是指令开头有空格符的不存入历史脚本中
- ignoredups:连续重复指令只存一个
- ignoreboth:结合前两者功能
- HISTFILE
- 设定历史脚本文件的路径文件名
- HISTFILESIZE
- 历史脚本文件存储指令的最大行数
- HISTIGNORE
- 不存入历史脚本文件中的指令样式,以:隔开
HISTIGNORE=ls:ps:t*:\& #表示ls/ps/t开头的命令/已经重复指令不保存
- &代表最后一个指令,这表示如果一直键入重复指令只会存一次.但需要对&先转义成单纯的字符
- HISTSIZE
- 设定在互动模式的shell中可记住的历史指令数目.一旦该shell结束历史记录脚本中只会保存HISTSIZE行数的指令.
- HOME
- 设定用户的家目录.
- HOSTFILE
- 包含自动补齐主机名的数据文件位置
- HOSTNAME
- 主机名
- HOSTTYPE
- 主机形态,例如i386
- IFS
- 定义字段的分割字符
- IGNOREEOF
- 设定在按ctrl+D时,出现几次EOF后才能注销系统.
- INPUTRC
- 设定命令行函数式库readline的启动配置文件,可覆盖~/.inputrc的设定
- LANG
- 目前语系(locale)的名称,locale是指一组地区性语言的信息
- LC_ALL
- 目前的locale,可覆盖LANG和LC_*的设定
- LC_COLLATE
- locale的字母排序
- LC_CTYPE
- locale的字符分类
- LC_MESSAGES
- locale信息显示的转换
- LINENO
- 脚本以执行到的行数
- MACHTYPE
- 描述主机形态的GNU格式:cpu-公司-系统
- MAIL
- 邮件文件的名称
- MAILCHECK
- 每隔多久就检查一次邮件,通常是60秒
- MAILPATH
- 设定检查新邮件的文件名,如果有两个以上用:分割
- OLDPWD
- 前一个工作目录
- OPTARG
- 用getopts处理选项时,取得的选项参数
- OPTIND
- 使用getopts处理选项时,选项的索引值
- OPTERR
- 如果吧OPTERR设为1,则getopts发生错误时,不管选项行第一个字符是否为:,仍然显示错误信息
- OSTYPE
- 执行bash的操作系统种类
- PATH
- 设置环境变量的值.
- PPID
- 父进程的id
- PRONPT_COMMAND
- 出现主要提示符$PS1之前执行的命令
- PS1
- 主要提示符
- PS2
- 次级提示符
- PS3
- select选单的提示符
- PS4
- 追踪程序时各行的提示符样式
- PWD
- 目前的工作路径
- RANDOM
- 随机函数,随机出现整数.在使用RANDOM变量之前,需要随意设置一个数字给RANDOM,当做随机数种子
RANDOM=$$ #$$当前进程的id
echo $RANDOM
- REPLY
- select和read没有设定读取变量时的默认变量名称
- SECONDS
- 目前bash shell已经执行的时间
- SHELL
- SHELL的文件路径
- SHELLOPTS
- 本变量的内容经set -o设定为以开启的shell选项,以:分割
- SHLVL
- 子shell的层级数
- TIMEFORMAT
- 设定time统计运行时间的格式
- TMOUT
- 如果TMOUT的值大于0,bash会在TMOUT秒后自动结束当前shell.
- UID
- 用户的编码
- $1-$n
- 位置参数,传入程序或者函数式的参数
- $*
- 代表所有的位置参数,并视为一个字符串
- $@
- 代表所有的传入参数,并将每一个参数视为一个字符串
- $#
- 表示传入参数的个数
- $-
- bash shell目前使用的功能选项.
- $?
- 上一个命令结束时返回的退出状态码
- $$
- 目前shell的进程编号
- $!
- 上一个后台程序的进程号
- $_
- 用三种用途:
- 脚本执行时,表示bash的绝对路径
- 上一个命令执行时,最后一个位置参数
- 检查邮件时为邮件的文件名
- HISTTIMEFORMAT
- 如果设定这个变量为一个时间格式,则在执行history时会在每个历史命令前显示日期时间.该变量支持的时间格式与date命令的相同.
if判断结构
1 2 3 |
if condition;then commands fi |
condition写法
- 执行命令的结果
- 因为判断语句是根据判断条件的退出状态码来选择操作方式的.所以一般的命令也是一种判断条件
- 符合命令.语法:((算术式))
- 如果算术式的运行结果不为0,则传回真值0.否则传回假值1
- test判断式
- [ -r filename -a -x filename ] #这里的-a是&&的意思
[ -r filename -o -x filename ] #这里的-o是||的意思- [[ 判断式 ]]
- 判断式为真传回0,否则为1
- command1 && command2
- 如果command1执行结果为真/执行成功才会执行command2
- command1 || command2
- 如果command1的执行结果为假/执行失败才会执行command2
数值比较
#比较 描述
#n1 -eq n2 等于
#n1 -ge n2 大于等于
#n1 -gt n2 大于
#n1 -le n2 小于等于
#n1 -lt n2 小于
#n1 -ne n2 不等于
字符串比较
#str1 = str2 是否相同
#str1 != str2 是否不等
#str1 < str2 小于
#str1 > str2 大于
#-n str 长度是否不为0
#-z str 长度是否为0
文件比较
#-a file 存在
#-b file 存在并是块设备文件
#-c file 存在并是字符文件
#-d file 存在并是目录
#-e file 存在
#-f file 存在并是文件
#-g file 存在并设立了set group id属性
#-h file 存在并是链接文件
#-k file 存在并设立了sticky位属性
#-p file 存在并是管道文件
#-r file 存在并可读
#-s file 存在并非空
#-t 文件描述符 文件描述符开启且链接到某个终端
#-u file 存在且设立了set user id属性
#-w file 存在并可写
#-x file 存在并可执行
#-O file 存在并属于当前用户
#-G file 存在并和当前用户是同一组
#-L file 存在并是符号链接文件
#-S file 存在并是socket文件
#-N file 存在并在上次读取后被修改过*******备份要用
#file1 -nt file2 file1比file2新,可用于备份文件
#file2 -ot file2 file1比file旧
bash选项状态
#-o set 选项名称 选项开启(选项开启时为真)
set
使用set -o 可以列出所有的bash选项,每个选项的含义如下:
选项 快捷开关(使用set -a可以快捷打开allexport)
allexport -a
从这个选项中被设置开始就自动标明要输出的新变量或修改过的变量,直至选项被复位
braceexpand -B
打开花括号扩展,它是一个默认设置
emacs
使用emacs内置编辑器进行命令行编辑,是一个默认设置
errexit -e
当命令返回一个非零退出状态(失败)时退出。读取初始化文件时不设置
histexpand -H
执行历史替换时打开!和!!扩展,是一个默认设置
history
打开命令行历史记录.默认为打开,这种情况下命令行的执行记录会被记录.
ignoreeof
禁止用EOF(Ctrl+D)键退出shell。必须键入exit才能退出。等价于设置shell变量IGNOREEOF=10
keyword -k
将关键字参数放到命令的环境中
interactive-comments
对于交互式shell,把#符后面的文本作为注释
monitor -m
设置作业控制
noclobber -C
防止文件在重定向时被重写,即方式使用>file且file存在的情况下被重写.
noexec -n
读命令,但不执行。用来检查脚本的语法。交互式运行时不开启
noglob -d
禁止用路径名扩展。即关闭通配符
notify -b
后台作业完成时通知用户
nounset -u
扩展一个未设置的变量时显示一个错误信息
onecmd -t
在读取和执行命令后退出
physical -P
设置时,在键入cd或pwd禁止符号链接。用物理目录代替
privileged -p
设置后,shell不读取.profile或ENV文件,且不从环境继承shell函数,将自动为setuid脚本开启特权
verbose -v
为调试打开verbose模式
vi
使用vi内置编辑器进行命令行编辑
xtrace -x
为调试打开echo模式
shell启动配置文件
bash shell在启动过程中会先执行启动配置文件中的脚本命令.我们可以通过编写这些启动配置文件的内容来在bash启动过程中完成一些操作.
配置文件有:
文件名 时机
~/.bash_profile 登录时
~/.bashrc shell启动时(执行新shell时)
~/.bash_logout 注销时
/etc/profile 任何用户的登陆
/etc/bash.bashrc 任何用户的shell启动时
/etc/skel/* 在创建一个新用户时,会将该目录下的文件复制一份到用户根目录下,其中包括shell启动配置文件
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 51CTO:Linux C++网络编程一08/13
- ♥ Shell 语法记述 第四篇09/05
- ♥ Linux_ 命令大全 文件管理03/16
- ♥ Bash Shell 命令09/04
- ♥ Linux 基于文件描述符的文件操作(非缓冲)03/23
- ♥ Linux 高性能服务器编程:TCP二11/24