bash简介:
bash是众多shell中最常用的一种,许多linux发行版将bash设置为默认shell。bash是一种命令解释型语言,是操作系统给用户提供的一种接口,能够将用户标准输入或文件中的命令提交内核执行。bash基础特性:1、变量 编程程序语言: 强类型: 定义变量时必须指定类型,参与运算必须符合类型要求,调用为声明 弱类型: 无需指定类型,默认均为字符型,参与运算会自动进行隐式类型转换 注:bash为弱类型语言 bash中的变量的种类,根据变量的生效范围: 本地变量:生效范围为当前shell进程,对当前shell之外的其他shell包括当前shell的子shell均无效 环境变量:对当前shell及子shell都有效;(对其他shell无效) 局部变量:生效范围为当前sehll进程中某代码片段(通常指函数) 位置变量:$1,$2,$3,...用于在命令行给脚本传递的参数 特殊变量:$?, $0, $*, $#, $@,$$ 本地变量 变量赋值:name='value',可以使用引用赋值: (1)可以使直接字符串 (2)变量引用:name=$var_name (3)命令引用:name=`COMMAND`, name=$(COMMAND) 变量引用:${name} , $name ${name}’s "":弱引用,其中的变量名会被替换成变量值; '':强引用,其中的变量引用不会被替换成变量值,而保持原字符串; set:显示已定义的所有变量 unset var_name:销毁变量 环境变量: 变量声明及赋值: export name=value declare -x name=value 变量引用:$name,$(name) 显示所有环境变量 export env printenv 销毁: unset name 变量命名法则: 1、不能使用程序中的关键字 2、只能使用数字、字母及下划线,且不能以数字开头 3、见名知义,驼峰法则或下划线 只读变量:(不能被修改,不能销毁,只能等到shell进程结束) readonly name 或 declare -r name 位置变量:在脚本代码中调用通过命令行传递给脚本的参数 $1,$2,...:对应调用第1、第2等参数 shift [n]:左移当前的位置参数,不加参数默认向左移动一位 $0: 脚本本身的名称 $*:传递给脚本的所有参数(把所有参数当做一个字符串) $@:传递给脚本的所有参数(每一个参数都是一个单独个体) $#:参数的个数 $$:是脚本运行的当前进程ID号 2、history管理命令历史 登录shell时,会读取命令历史文件~/.bash_history记录下的命令;登录进shell后重新执行的命令只 会记录在缓存中,这些命令会在用户退出时追加记录到命令历史文件中(或者使用-a选项)。
history常用选项:
-d OFFSET:根据序列号删除历史中指定的命令 -c:清空历史文件 -a:追加本次会话新执行的命令历史列表到历史文件.bash_history中 快捷操作: !#:调用历史中第#条命令 !string:调用历史中最近一个以string开头的命令 !!:执行上一条命令 !$:调用上一条命令的最后一个参数 快捷键:ESC, . 或者alt + . 相关环境变量: HISTFILE: ~/.bash_history(用户家目录) HISTSIZE:命令历史记录的条数,即history所能显示命令的最多条数。 HISTFILESIZE:命令历史文件所能记录的最多历史命令条数 HISTCONTROL:控制命令历史记录方式 ignoredups: 忽略重复的命令,连续且相同方为"重复"(bash默认) ignorespace:忽略所有以空白开头的命令 ignoreboth:包含ignoredups和ignorespace 修改环境变量值方式:export 变量名='值' 变量赋值:把赋值符号后面的数据存储于变量名hash:缓存(记录)用户的历史命令路径到内存中,实现系统加速,只记录外部命令路径
[root@localhost man]# hash hits command 5 /bin/grep 1 /bin/egrep 1 /usr/bin/head 3 /bin/cat 4 /usr/bin/man
hash -r:删除某条命令的缓存记录
注意:当命令的路径修改之后,需要删除此条命令的缓存记录,否则会报错,提示找不到此命令
3、命令及路径补全(Tab键)
命令补全:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻命令名命名的文件,返回第一次找到的命令。4、命令行展开 ~:展开为用户的主目录 ~USERNAME:展开为指定用户的主目录 {}:可承载一个以逗号分隔的列表,并将其展开为多个路径5、命令的执行结果状态,两类: 1、程序的返回值 2、程序的执行状态结果 bash使用特殊变量$?保存最近一条命令的执行状态结果: 0:成功 1 - 255:失败6、命令别名(alias) (1) alias 显示当前shell进程所有可用的命令别名 (2) alias NAME='VALUE' 注意:在命令行中定义的别名,仅对当前的shell进程有效; 仅对当前用户生效(永久):~/.bashrc 对所有用户生效(永久):/etc/bashrc bash进程重新读取配置文件,立即生效: source /etc/bashrc . /etc/bashrc 删除别名: unalias NAME 注意:如果别名同原命令的名称一样,如果要执行原命令,则用"\COMMAND"7、glob(globbing) bash中用于实现文件名"通配" 通配符: * : 任意长度的任意字符 ?:一个任意字符 []: 匹配指定范围内的任意单个字符 [0-9] [a-z]:不区分字符大小写,区分用[[:lower:]] [A-Z]:不区分字符大小写,区分用[[:upper:]] [^]:匹配指定范围外的任意单个字符,[^0-9] 专用字符集合: [:digit:]:数字 [:lower:]:小写字母 [:upper:]:大写字母 [:alpha:]:字母 [:alnum:]:字母及数字集合 [:space:]:空格 [:punct:]:标点符号 8、bash的I/O重定向及管道 打开的文件都有一个fd:file description(文件描述符) 标准输入: keyboard,0 标准输出: monitor, 1 标准错误输出:monitor, 2 I/0重定向:改变标准位置 输出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS >: 覆盖重定向 >>: 追加重定向 set -C: 禁止将内容覆盖输出到已有文件中 强制覆盖:>| set +C:取消禁止 2>: 覆盖重定向错误输出流 2>>:追加 标准输出和错误输出各自定向至不同位置: COMMAND > /path/to/file.out 2> /path/to/error.out 合并标准输出和错误输出为同一个数据流进行重定向: &> :覆盖 COMMAND > /path/to/file.out 2>&1 &>> :追加 COMMAND >> /path/to/file.out 2>&1 输入重定向:< tr:转换或删除字符 tr [OPTION]... SET1 [SET2] tr abc ABC < /etc/fstab -d:给定删除字符 HERE DOCUMENT:<< cat << EOF cat > /path/to/somefile << EOF[root@localhost ~]# cat > /tmp/test.out << EOF > Hello > World > EOF
[root@localhost ~]# cat /tmp/test.out Hello World
管道:
echo $PATH | tr 'abc' 'ABC' tee命令:read from standard input and write to standard output and files -a,--append:追加 echo $PATH | tr 'a-z' 'A-Z' | tee /tmp/path.outbash配置配置文件: 按生效范围划分:存在两类: 全局配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置: ~/.bash_profile ~/.bashrc 按功能划分,存在两类: profile类:为交互式登录的shell提供配置 全局:/etc/profile, /etc/profile.d/*.sh 个人: ~/.bash_profile 功能: (1)用于定义环境变量 (2)运行命令或脚本 bashrc类:为非交互式登录的shell提供配置 全局:/etc/bashrc 个人:~/.bashrc 功用: (1)定义命令别名 (2)定义本地变量 shell登录: 交互式登录: 直接通过终端输入账号密码登录; 使用"su - UserName"或"su -l Username"切换的用户 读取配置文件的顺序流程: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 非交互式登录: su UserName 图形界面下打开的终端 执行脚本 读取配置文件的顺序流程: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 编辑配置文件定义的新配置的生效方式: (1)重新启动shell进程 (2)使用source或.命令终端: 用户与主机交互 物理终端:直接接入本机的显示器和键盘设备,console 虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端,Centos 6 默认有6个 ctrl + alt + f1-6 设备文件路径:/dev/tty# 图形终端:附加在物理终端之上的以软件方式虚拟实现的终端, ctrl + alt + f7 模拟终端:图形界面下打开的命令行接口,基于ssh协议或telnet协议等远程方式打开的界面 设备文件:/dev/pts/# [0,∞]交互式接口:启动终端后,在终端设备附加一个交互式应用程序 GUI: X protocol ,window manager,desktop Desktop: GNOME(c , gtk) KDE (C++,qt) XFCE(轻量级桌面) CLI: shell程序: sh(bourn) csh ksh(korn) bash(bourn again shell),GPL zsh 命令提示符:prompt [root@localhost ~]# echo $PS1 [\u@\h \W]\$ prompt: 管理员:# 普通用户:$ 查看当前用户默认shell:[root@localhost ~]# echo $SHELL /bin/bash
查看系统所有可用的shell:
[root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
bash的快捷键:
Ctrl + l:清屏 Ctrl + a:跳转至命令开始处 Ctrl + e:跳转至命令结尾处 Ctrl + c:取消命令的执行 Ctrl + u:删除命令行首至光标所在处的所有内容 Ctrl + k:删除光标所在处至命令行尾的所有内容