鸟哥的Linux私房菜认识与学习bash复习

bash shell的主要优点:历史命令(history)
命令与文件的补全功能
命令别名alias
任务管理 前台 后台
程序化脚本
通配符
查询命令是否为Bash内置的命令 :type [-tpa] name
例如:查询一下ls是否为bash内置
type ls
在type不加任何选项时,type会显示出ls是内置命令还是外部命令
-t:会显示alias或builtin(表示是内置命令)或file(表示是外部命令)

shell的变量功能

1.echo:读出变量的内容
例:echo ${PATH}
2.设置或是修改变量的内容:用=连接变量和他的内容就好
如果变量没有被设置,echo ${myname} 就是空的
myname=asdf
echo ${myname} 就是显示asdf

变量设置规则

1等号两边不能有空格
例如:myname = sadf 和 myname=sdfasdf sadfadsf
错误
2变量名称只能是英文或是数字,但开头不能是数字
3变量内容若有空格用"" 或是 "
但是""内的变量可以保有原有功能
''内的为纯文本
4可以用转义符\ 来将特殊字符转义
5如果一串命令中用到其他的命令可以用反单引号`命令`或是$(命令),第二种更常用
6若该变量为扩增变量内容时,可用 ${变量}累加内容
如:PATH=${PATH}:/home/bin
7若该变量需要在其他子进程中使用需要用export来设置为环境变量
8取消变量的方法是使用:unset 变量名称

环境变量的功能

查看目前的环境变量:env或export
直接env就会列出所有的环境变量
直接set就会列出所有的变量

常见环境变量说明:

HOME:代表用户的根目录
SHELL:告诉我们目前这个环境使用的shell是那个程序
HISTSIZE:与历史命令有关
PATH:执行文件查找路径
LANG:语系数据
PS1:提示字符的设置,就是每次在终端下的命令提示字符
$:关于本shell的PID
?:关于上个执行命令的返回值(如果命令执行成功则返回0,不成功返回错误代码)

子进程只会有父进程的环境变量,对于用户自定义的变量则没有
可以用export将用户自定义的变量设置为环境变量
影响显示结果的语系变量(locale)
变量键盘读取 read
-p:后面可以接提示字符
-t:后面可以接等待的秒数.
read之后不加任何参数,直接加上变量名称,就会主动出现一个空白行等待你的输入
declare:声明变量的类型(是数组还是整数),默认是字符串类型
declare [-axir] 变量名
-a :将那个变量定义为数组类型
-i :将那个变量定义为整数类型
-x :作用等于export,将那个变量变成环境变量
-r :将变量设置为readonly类型,该变量不可被更改内容,也不能unset

在默认的情况下,变量类型默认为字符串类型,所以若不指定类型,则1+2为一个字符串而不是计算式.另外,Bash环境的数值计算默认最多仅能到达整数形态,所以1/3结果是0

与文件系统和程序的限制关系:ulimit
用来限制别的用户可以使用的系统资源例如可以开启的文件数量等

变量内容的删除和替换

#:符合替换文字的最短的哪一个(从前往后)
##:符合替换文字的最长的哪一个(从前往后)
%:最短的哪一个(从后往前)
%%:最长的哪一个(从后往前)

例如:path=${PATH}
echo ${path}
echo ${path#/*local/bin:}
意思是从左往右删除掉 有local/bin:的最短的那个

变量内容的替换:

${变量/旧字符串/新字符串} 若变量内容符合旧字符串,则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串} 若变量内容符合旧字符串,则全部的旧字符串会被新字符串替换

命令别名:alias
历史命令:history
!!: 执行上一个命令
!1000 执行第一千个命令
!al 执行最近以al为开头的命令

路径与命令的查找顺序:

1以相对路径或绝对路径执行命令 例如/bin/ls
2有alias找到该命令执行
3有bash内置的命令来执行
4通过$PATH变量的顺序来执行

bash的环境配置文件

分为全局系统配置文件用户个人偏好配置文件
如果想要将命令别名,自定义的变量在注销Bash后仍然生效就要将这些设置写入配置文件才行
login shell :取得bash是需要完整的登录流程,就称为login shell ,例如:有tty1到tty6登录需要输入用户的账号和密码,此时取得的bash就称为login shell
non-login shell :取得bash的方法不需要重复登录的操作,例如:以X Window登录Linux后,在以X的图形化接口启动终端,此时这个终端接口并没有需要再次的输入账号和密码,此时的bash环境就称为non-login shell ,再例如:进入子进程,也是non-login shell
这两个取得bash的情况,读取的配置文件不同
在login shell下所读取的整体环境配置文件其实只有/etc/profile但是/etc/profile还会调用其他的配置文件,接下来就是读取用户的个人配置文件,有三个:~/.bash_profile ~/.bash_login ~/.profile 只会读取一个,且是依序进行的.
另外~/.bash_profile还会调用~/.bashrc
source或小数点. :读入环境配置文件的命令
用法:source 配置文件名或
. 配置文件名

non-login shell 仅会读取~/.bashrc
如何查看目前的一些按键代表的意义:stty
stty -a 列出所有的按键意义
stty eof ^h 意思是设置[Ctrl]+h 作为结束输入的意思

通配符

* :代表0到无穷多个任意字符
? :代表一定有一个任意字符
[] :代表一定有一个在括号内的字符,例如[abcd]代表一定有一个字符可能是a,b,c,d中的任何一个
[-]:代表在编码顺序内的所有字符,例如[0-9]代表0到9之间的所有数字,因为数字的语系编码是连续的
[^]:若中括号内第一个字符为^,则表示反向选择,例如[^abc],代表不是a,b,c中的任意一个字符

数据流重定向:

标准输入:代码为0.使用<或<<
标准输出:代码为1.使用>或>>
标准错误输出:代码为2,使用2>或2>>
>:以覆盖的方式将正确的数据输出到指定的文件或设备上
>>:以累加的方式将正确的数据输出到指定的文件或设备上
2>:以覆盖的方式将错误的数据输出到指定的文件或设备上
2>>:以累加的方式将错误的数据输出到指定的文件或设备上
例如:find /home -name .bashrc > right 2> error
意思是把正确的数据存到right文件中,把错误的信息存到error文件中,屏幕上不会有任何输出.
/dev/null 垃圾桶黑洞设备
就是把错误信息丢掉,不存到文件中./dev/null会把所有导向他的数据丢到
例如:find /home -name .bashrc > right 2> /dev/null
<的用法:就是把原本由键盘输入的数据,改由文件内容来替换

命令执行的判断依据: ; && ||

; 用在不考虑命令相关性的连续命令执行
&& 和||的用法 :
一般command1 && command2 || command3
意思是 若cmd1成功执行cmd2
若cmd1失败执行cmd3

管道命令:

管道命令仅会处理标准输出,对于标准错误会予以忽略
管道命令必须要能够接受来自前一个命令的数据成为标准输入继续处理才行.

管道命令:选取命令:cut,grep
cut用法:cut -d '分隔字符' -f fields
-c :以字符为单位取出固定字符区间
意思是用分隔字符把信息化成几段,-f 后加第几段的意思
例如:echo ${PATH} | cut -d ':' -f 5
echo ${PATH} | cut -d ':' -f 5,6
鸟哥的Linux私房菜认识与学习bash复习
grep [-acinv] ‘查找字符’ filename
-c :计算找到查找字符的次数
-i :忽略大小写的不同
-n :输出行号
-v :反向选择即显示出没有查找字符的哪一行
与cut 的分段取第几段的不同就是grep是有该关键词就取出该行
排序命令:sort ,wc, uniq