bash shell
命令历史history
环境变量:
HISTSIZE :命令历史记录的条数 HISTFILE :~/.bash_history HISTFILESIZE:
显示环境变量:echo
环境变量的修改:export
history
history [-c] [-d offset] [n] -c :清空命令历史 -d offset :删除指定偏移量的历史条目 n :显示历史中最近的n 条命令 -a:
调用历史中的命令
!# :重复执行第# 条指令 !! :重复执行上一条命令 ! !string :执行历史中以string 开头的第一条匹配到的命令
命令别名
通过alias命令实现
1 )alias 显示当前shell 进程所有可用的命令别名 2 )alias NAME='VALUE' 定义别名NAME 3 )unalias NAME,unalias -a 撤销别名 撤销所有定义别名
通过命令行定义的命令别名只对当前shell有效,命令别名要想永久生效就需要编译到配置文件里面。
仅对当前用户有效:~/.bashrc
对所有用户有效:/etc/bashrc
4 )bash进程重新读取配置文件,文件配置好了要立即生效。
glob通配符
* :任意长度的任意字符 ?:任意单个字符 [] :匹配指定范围内的任意单个字符
[] :匹配指定范围内的任意单个字符 [0-9] [a-z] :不区分字符大小写 [A-Z] :大写字母 [^] :匹配指定范围外的任意单个字符 [^0-9]
专用字符集合 [[:digit:]]:任意数字,相当于0-9 [[:lower:]]:任意小写字母 [[:upper:]]: 任意大写字母 [[:alpha:]]: 任意大小写字母 [[:alnum:]]:任意数字或字母 [[:space:]]: : [[:punct:]]:标点符号
bash快捷键
Ctrl+l: 清屏,相当于clear 命令; Ctrl+a:跳转至命令开始处; Ctrl+e:跳转至命令结尾处; Ctrl+c:取消命令的执行
命令行展开: ~ :展开为用户的家目录 ~USERNAME :展开为指定用户的主目录 { } :可承载一个以逗号分隔的列表,并将其展开为多个路径 /tmp/{a,b}=/tmp/a,/tmp/b
bash的输入输出及管道
标准输入:keyboard ,0 标准输出:monitor ,1 标准错误输出:monitor ,2 标准输出追加: >>
输出重定向:COMMAND > NEWPOS, COMMAND >> NEWPO
> :覆盖重定向,目标文件中的原有内容会被清除; >>: 追加重定向,新内容会追加至目标文件尾部;
例子:使用输出重定向将/boot目录的内容保存到/root/abc文件中
说明,没有目标文件会自动创建一个文件
# set -C:禁止将内容覆盖输出至已有文件中; 强制覆盖:>| # set +C:禁止将内容覆盖输出至已有文件中;
标准输出和错误输出各自指向不同的位置
像这样错误输出就不能重定向了,所以要使用错误输出用的符号
2>: 覆盖重定向错误输出数据流; 2>>: 追加重定向错误输出数据流;合并正确和错误的输出数据流
COMMAND > /path/to/file.out 2>&1 COMMAND >> /path/to/file.out 2>&1
输入重定向
tr 命令:转换或删除字符 tr [OPTION]... SET1 [SET2]
将/etc/fstab文件的中小写字母变成大写
HERE Documentation :<< (可用于生成文档,并以此为结束的标志) # cat << EOF # cat > /path/to/somefile << EOF
管道
COMMAND1 | COMMAND2 | COMMAND3 注意:最后一个命令会在当前shell 进程的子shell 进程中执行
bash变量
构成:变量名+指向内存空间 赋值:name=value,将此字符串存到所指存储空间 引用:${name},$name 替换:将变量名出现的位置替换为其所指向的内存空间的数据
强弱类型
静态语言: 编译型语言 强类型(变量) 事先转换成可执行格式 c\c++\JAVA\c# 动态语言: 解释性语言 弱类型 边解释边执行 asp/asp.net/php/shell/python/perl Shell: 弱类型编程语言 强类型: 变量在使用前,必须事先声明,甚至还需要初始: 弱类型: 变量用时声明,甚至不区分类型:
根据生效范围分类
本地变量: 生效范围为当前shell 进程;对当前shell 之外的其它shell 进程,包括当前shell 的子shell 进程均无效; 环境变量:生效范围为当前shell 进程及其子进程; 局部变量:生效范围为当前shell 进程中某代码片断( 通常指函数); 位置变量: $1, $2, ... 来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数; 特殊变量:$?, $0, $*, $@, $#
位置变量 在脚本代码中调用通过命令行传递给脚本的参数 $1,$2,... :对应调用第1 ,第2 等参数 $#: 它可抓出positional parameter 的数量,即在脚本后面的参数有几个 $0 :脚本本身的名字 $@ :传给脚本的所有参数 $*: 是以一个单字符串显示里所有向脚本传递的参数,与位置参数不同,参数可超过9个 个 $$:是脚本运行的当前进程的ID号 号 $?:显示最后命令的退出状态
本地变量: 1) 变量赋值:name='value', 其中的value 可以为 a. 可以使直接字串:name="username" b. 变量引用:name="$username" c. 命令引用:name=`COMMAND` (单反引号)或者 name=$(COMMAND) 2) 变量引用:${name},$name " ": 弱引用,其中的变量引用会被替代为变量值 ' ': 强引用,其中的变量引用不会被替换为变量值,而保持原字符串 3)显示已经定义的所有变量: set 撤销变量 unset name
环境变量 1)变量声明,赋值 export name=VALUE declare -x name=VALUE (-x: to make NAMEs export) 2)变量引用:$name,${name} 3) 显示所有环境变量: export env printenv 4) 只读变量 readonly name declare -r name (-r :to make NAMEs readonly)
配置文件
按生效范围划分,存在两类: 全局配置: /etc/profile /etc/profile.d/*sh /etc/bashrc 个人配置 ~/.bash_profile ~/.bashrc
按功能划分,存在两类; 1)profile 类:为交互式登录的shell 提供配置 全局:/etc/profile,/etc/profile.d/*.sh 个人:~/.bash_profile 功能:用于定义环境变量 要执行的命令或脚本 2)bashrc 类:为非交互式登录的shell 提供配置 全局:/etc/bashrc 个人:~/.bashrc 功能:定义命令别名 定义本地变量
读取顺序 交互式: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc 非交互式: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 编辑配置文件定义的新配置的生效方式: 重新启动shell 进程; 使用source 或. 命令进程; source Or . filename [arguments] shell 登录 交互式登录: 直接通过终端输入账号密码登录 使用“ “su - UserName” ” 或“ “su -l UserName” ” 切换的用户 非交互式登录 su UserName 图形界面下打开的终端
shell脚本之基础练习
1、写一个脚本计算/etc/passwd文件中的第10个用户和第20个用户的id号之和;
2、写一个脚本计算/etc/rc.d/init.d/functions和/etc/inittab文件的空白行数之和;
利用bash -n 2.sh检查一下有无语法错误
利用bash -x 2.sh查看
3、将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.localdomain,则将其设置为www.yezi.com;
4、写一脚本,通过命令传递两个文本文件路径给脚本,计算其空白行数之和;
演示结果如下:
原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/60352
评论列表(1条)
对于配置文件读取顺序,希望自己能通过调试或者读代码来掌握,比如加一些echo信息,你在执行的过程中能很明显看到读取的文件。