标签:bash的基础特性
首先需要知道什么是shell?如果将Linux内核当作一个地球的核心,那么shell就是地壳。shell本身也是一个应用程序,为我们提供了使用系统的接口。shell程序有很多种,目前主流发行版大多数默认使用bash,其次还有sh,tcsh,csh,fish等,其程序存储在/etc/shells目录下。
由于目前最常用的bash,所以就以bash为例来说一说bash的基础特性,偷偷说一句,其实我也是个新手,其他的shell并未接触,不敢轻易去说,当然本文中难免有错误,还请各位不吝赐教,让大家共同进步。
bash的基础特性之:命令历史
history命令:记录当前用户的使用过的命令的历史记录。可通过手动设置环境变量来定制 history的功能;
HISTSIZE:shell进程可保留的命令历史的条数,默认是1000条。
HISTFILE:持久保存命令历史的文件,其路径在每个用户的家目录下面的.bash_history里面。
HISTFILESIZE:设置~ USERNAME/.bash_history保存的命令的条数,默认是1000条。
HISTCONTROL:控制命令历史记录的方式,有三种方式:
1.ignordeups:忽略重复的命令
2.ignorespace:忽略以空白字符开头的命令
3.ifnoreboth:以上两者同时生效
其命令的用法为:
~]# history [option] history -anrw [FILENAME] history -ps [参数][参数...]
其option主要有以下几种:
-c 清空命令历史记录
-d offset(偏移量) 删除指定命令历史记录
-r 从文件读取命令历史记录到历史列表中
-w 把历史列表中的命令追加到历史文件中
history # 查看指定的第#条历史命令
调用命令历史列表中的命令:
!# 再次执行第#条命令
!! 再次执行上一条命令
!STRING 再次执行最近一个以STRING开头的命令
调用上一条命令的最后一个参数:
快捷键:先按ESC键后,在按.键
也可以直接输入:!$调用上一条命令的参数
bash的基础特性之:
命令补全:shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作 命令处理机制:先查找shell内嵌命令,如果没有则根据PATH环境变量中设定的目录,从左到右逐 个搜索目录下的文件名,直到给定的打头字符串能够唯一标识某命令程序文件,则按一次tab键补 全;若仅不能唯一标识,则按两次tab键列出命令列表;否则无反应。
路径补全:根据给定的起始路径,以对应的路径下的打头字符串来逐一匹配起始路径下的每个 个文件,该打头字符串能够唯一标识,则按一次tab键直接补全,如果仅不能唯一标识,则给出所 有符合条件的命令列表,否则无反应。
这里介绍两个目录管理类的命令:mkdir和rmdir
mkdir:创建目录,其格式为:
mkdir [OPTIONS] ... DIRECTORY
OPTINOS主要有以下几种:
-p 自动按需创建目录,如果上级目录不存在会自动创建。
-v verbose,显示创建的详细过程。
-m MODE 创建目录时直接给定权限,否则默认权限。
rmdir:删除目录,其格式为:
rmdir [OPTIONS] ...DIRECTORY...
-p 删除目录后,如果目录为空,则一般删除,直到父目录不为空为止,危险慎 用。
-v verbose,显示删除的详细过程。
bash基础特性之:命令hash
前面说到命令补全机制,Linux在每次搜索命令都是需要消耗一定的时间的,虽然每次进行的时
间很短,但是积少成多,因此就有了hash表,来缓存此前 使用过的命令。
hash主要命令:
hash ;列出
hash -d COMMAND 删除
hash -r 清空
bash基础特性之:命令行展开
~ USERNAME:自动展开用户家目录,或指定的用户的家目录.
{}:可承载一个以逗号分隔符的路径列表,并能够将其展开为多个路径,例如/tmp/{a,b}相 当于/tmp/a /tmp/b。
这里介绍一个查看目录结构的命令:tree命令
tree [OPTIONS] [DIRECTORY]
-L level指要显示的目录的层级
bash的基础特性之:命令的执行状态结果
bash通过状态返回值来输出此结果,成功为0,失败为1-255,可以通过$?命令来查看上一命令 的状态返回值,进而确定命令的执行状态结果。
引用命令的执行结构有两种方式:$(COMMAND)或者`COMMAND`.
bash的基础特性之:引用
强引用:‘‘变量引用不能被替换
若引用:""变量引用可以被替换
命令引用:``
bash的基础特性之:快捷键
Ctrl+a:跳转至命令行的行首
Ctrl+e:跳转至命令行的行尾
Ctrl+u:删除行首至光标所在处之间的字符
Ctrl+k:删除光标所在处到行尾之间的字符
Ctrl+l:清屏
bash的基础特性之:文件名通配globbing
*:表示匹配任意长度的任意字符的,例如p*表示所有p开头的字符
?:表示匹配单个任意字符,例如p?表示p开头的所有两个字符
[]:匹配指定范围内的任意单个字符,有几种特殊格式:
[a-z]、[A-Z]、[a-z0-9]不区分大小写
[[:upper:]]表示所有的大写字母
[[:lower:]]表示所有的小写字母
[[:alpha:]]表示所有的字母
[[:digit:]]表示所有的数字
[[:almun:]]表示所有的字母和数字
[[:space:]]表示所有的空白字符
[[:punct:]]表示所有的标点符号
[^]表示匹配指定范围外的任意字符
例如[^0-9]表示除0-9以外的任意字符
bash的基础特性之:IO重定向及管道
可用的输入的设备:文件(对Linux而言,一切皆文件)包括键盘设备,文件系统上的
常规文件,网卡等。
可用的输出的设备:文件,包括显示器,文件系统上的常规文件,网卡等。
程序的数据流有三种:
输入的数据流:标准输入(stdin),标准设备是键盘
输出的数据流:标准输出(stdout),标准设备是显示器
错误输出流:错误输出(stderr),标准设备是显示器
fd:file derscriptor,文件描述符:
标准输入:0
标准输出:1
错误输出:2
IO重定向:
输出重定向:>,覆盖输出,直接覆盖原文件,例:cat /etc/issue > /dev/sda 此命令非 常危险,可能会干掉硬盘,在dev设备文件下进行操作时一定要注意。
输出重定向:>>,追加输出,在文件的尾部新增。
这里可以使用set命令来设置或撤销选项的值或位置参数,set -C:禁止覆盖输出至已存在
的文件,此时可以使用>|强制覆盖输出。set +C:关闭上述特性。
错误输出流重定向:2>,2>>
合并正常输出流和错误输出流有两种方式:1、&>,&>>,2、COMMAND > /PATH/TO/SOMEFILE 2&>1或者COMMAND >> /PATH/TO/SOMEFILE 2&>1。
tr命令:
tr [options]...SET1 [SET2]
说明:把输入的数据当中的字符,范式在SET1定义范围类出现的,通通对位转换
为SET2出现的字符。
用法一:tr SET1 SET2 </PATH/FROM/COMEFILE
tr [a-z] [A-Z] < /etc/issue
用法二:tr -d < /PATH/PROM/SOMEFILE
<<:here document此处创建文档
cat << EOF 内容 EOF
cat > /PATH/TO/SOMEFILE <<EOF 内容 EOF
管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
COMMAND1 | COMMAND2 |COMMAND3
这里有一个不得不说的命令:tee
COMMAND1 | tee /PATH/TO/SOMEFILE | COMMAND2
Linux的重要哲学思想之一:组合小程序,完成复杂的任务。
bash基础特性之:变量
我们说程序是由指令+数据组成,这里的指令是由程序文件提供,数据由IO设备、文件、管道、 变量等提供,我们也说程序是由算法及其算法所决定的数据结构组成。不管哪种方式,都离不开
数据,但是在程序中,数据是不可能一成不变的,这就有了变量。什么是变量名呢?变量名就是
指向内存空间的某段起始位置。
变量赋值:name=value
变量类型:存储格式、表示数据范围以及能够参与的运算
编程语言:
强类型编程:严格定义了数据的类型,并且要事先声明,有的编程语言还要事先
赋值。如C,JAVA
弱类型编程:不用严格区分数据类型,bash
bash把所有的字符串统统视为字符型,在进行运算时自动转换成数值型,不
支持浮点数,除非进行外在工具。
bash中的变量无需事先声明,相当于把声明和赋值过程同时实现。
变量替换:把变量名出现的位置替换为其所指向的内存空间的数据。
变量引用:${var_name} ,$var_name
变量名:只能包含数字,字母和下划线且不能以数字开头,变量名的命名法则:见名知意
命名机制遵循某种法则,不能使用程序的保留字符if,while,else...
bash的变量类型:
本地变量:作用域为当前shell;
变量赋值:name=value
变量的引用:${name},$name
查看变量:set命令
撤销变量:unset name;此处非变量引用,不用加$
环境变量:作用域为当前shell及其子shell进程;
变量赋值:export name=value
或 declare -x name=value
变量引用:${name},$name
bash内嵌了许多环境变量,通常为大写字符,用于定义bash的工作环境,如
PAHT,HISTSIZE,HISTFILESIZE,HISTFILE,HISTCONTROL,SHELL,HOME,UID,PWD,
OLDPWD...
查看环境变量:export或declare -x或printenv或env
撤销环境变量:unset name
局部变量:作用域仅为某代码片段(函数上下文)
特殊变量:shell内置的有特殊功用的变量。
只读变量:1、declare -r name 或readonly name只读变量无法重新赋值,并且
不能撤销,存活时间为当前shell进程生命周期,shell进程的终止
而终止。
bash特性之多命令执行:
~]# COMMAND1;COMMAND2;COMMAND3;...
逻辑运算:
运算数:真(true,yes,on,1)
假(false,no,off,0)
与:
1&&1=1
1&&0=0
0&&1=0
0&&0=0
或
1||1=1
1||0=1
0||1=1
0||0=0
非
!0=1
!1=0
短路法则:
~]# COMMAND1 && COMMAND2
COMMAND1为"假",则COMMAND2不会执行
否则,COMMAND1为“真”,则COMMAND2必须执行
~]# COMMAND1 || COMMAND2
COMMAND1为“真”,则COMMAND2不执行,否则
COMMAND1为“假”,则COMMAND2必须执行
示例:id $username || useradd $username
本文出自 “小憩清风” 博客,请务必保留此出处http://xiaoqiqingfeng.blog.51cto.com/3720264/1763057
标签:bash的基础特性
原文地址:http://xiaoqiqingfeng.blog.51cto.com/3720264/1763057