天天看点

作业History查看到的命令为:配置文件 + 当前shell中的缓存正常退出用户的情况下,会将用户执行的历史命令保存到对应用户的配置文件中正常退出命令:exit logout ——> Ctrl+d历史命令的配置文件:~/.bash_history在shell脚本中 # 开头的行代表注释

一.Shell基础

1.Shell的概念:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行

2.Shell基础:命令,函数,变量等

3.Shell高级:字符的处理方式,流程控制,条件判断等

4.脚本的作用:辅助系统管理员完成复杂的重复性任务

5.写脚本的必要条件 1)熟练掌握Linux系统管理命令

2)学会收集系统内的关键词(判断)

3)流程控制

6.常见的shell类型 1)Bourne shell (sh)

2)C shell (csh)

3)Korn shell (ksh)

4)Bourne Again shell (bash)

注@脚本的开头格式 #!/bin/bash

7.查看Linux中支持的shell类型命令:

cat /etc/shells & 命令后加上(&)符是放置后台运行

二.Shell的执行方式

echo [选项] [输出内容]

-n #取消输出后行尾的换行符号

-e #支持反斜线(\)控制的字符转化

常用的\控制字符:\n #换行符(enter)

\t #制表符(tab)

\0nnn #按照八进制ASCII码表输出字符,零为数字0,nnn为三位八进制数

\xhh #按照十六进制ASCII码表输出字符,其中hh是两位十六进制数

显示颜色

echo -e “\e[31:1mhello world.\e[0m” #固定格式

文字颜色:30=黑色,31=红色,32=绿色,33=×××,34=蓝色,35=洋红,36=青色,37=白色,39=结束

底纹颜色:40=黑色,41=红色,42=绿色,43=×××,44=蓝色,45=洋红,46=青色,47=白色,49=结束

特殊的控制显示

\e[0m #关闭所有属性

\e[1m #设置高亮度

\e[4m #下划线

\e[5m #闪烁

\e[7m #反显

\e[8m #消隐

shell脚本

创建shell脚本文件,一般以 .sh结尾或 .bash结尾

Shell脚本运行方式 1)添加x执行权限(相对或绝对路径执行)

2)用bash命令调用脚本文件

例:vim a.sh #!/bin/bash

echo -e “\e[31;1mhello world.\e[0m”

bash的基本功能

1)历史命令:history

命令格式:history [选项]

-c #清空历史命令

-w #把缓存中的历史命令保存到历史命令的配置文件中

2)命令和文件的补全

Bash放在/bin/bash中,它有许多特色可以提供如命令补全,命令编辑,命令历史表等功能,只能在命令行生效,文本文件中无效

3)命令别名

别名格式:alias 别名=‘原命令 [选项]’

两个配置文件:单个用户 ~/.bashrc

所有用户 /etc/bashrc

#注:别名优先级别更高

例:alias grep=‘grep --color=auto’ #显示颜色

Vim写入两个配置文件中,用命令:source [配置文件] #重新加载生效

1)用绝对路径或相对的方式执行命令

2)别名命令

3)bash 内置命令

4)根据环境变量定义的目录查询找到的命令

bash常用快捷键

Ctrl+a #把光标移动到命令行头

Ctrl+e #把光标移动到命令行尾

Ctrl+c #强制终止当前命令

Ctrl+u #删除或剪切光标之前的命令

Ctrl+k #删除或剪切光标之后的命令

Ctrl+y #粘贴Ctrl+u或k的内容

Ctrl+r #在历史命令中搜索

Ctrl+d #退出当前的终端

Ctrl+s #暂停屏幕输出

Ctrl+q #回复屏幕输出

Ctrl+z #暂停,并放入后台{fg:恢复最后一次放入后台的命令}{jobs:查看 在后台暂停的任务列表}

输出和输入重定向

标准输出:设备文件名 /dev/stdin

#不使用重定向符写入到其它设备或文件内,直接显示到屏幕上的叫做标准输出

输出重定向:1)正确结果的重定向 /dev/stdout

echo “12345”> a.txt

echo “12345”>> a.txt

2) 错误结果重定向 /dev/stderr

lls 2> a.txt #在>前面加上数字2(错误文件描述)

abc 2>> a.txt

3) 正确输出和错误输出同时保存

ls &> a.txt

#以覆盖方式,把正确和错误输出保存到一个文件中

ls &>> a.txt

#以追加方式,把正确和错误输出保存到一个文件中

ls > stdout.txt 2> stderr.txt

#以覆盖方式把正确输出保存到stdout.txt文件中,把错误输出保存到stderr.txt文件中

输入重定向:

命令:wc [选项] [文件名]

-c #统计字数(字符)回车和结束符也算字符数

-w #统计字符串数

-l #统计行数

#实际格式:wc < install.log 一般忽略 < 字符

多命令顺序执行连接符

1)命令选项连接符

-a 逻辑与 -o 逻辑或

find ./ -name “abc” -a -type f

2)命令执行连接符

-exec -ok #与exec一样,只是执行时提示是否进行下一步

find ./ -name “abc” -exec ls -ld {}\;

4)find和grep的区别

Find:在系统中查找符合条件的文件名,是完全匹配,如果需要模糊查找使用通配符

#搜索时只有完全匹配的才会被查找出来

Grep:是在文件中查找符合条件的字符串,是包含匹配,如果需要精确查询,需要正则表达式(^...$)

#查询关键词时,只要包含关键词的行都被显示出来

管道符

1)格式:命令1 | 命令2

#将命令1的标准输出作为命令2的标准输入

ps aux | grep “httpd”

#在进程中过滤Apache服务是否开启

2)xargs 是实现(将标注输出作为命令的选项)

echo “--help” | cat

echo “--help” | xargs cat #把前面命令变为后面命令的选项

通配符

? #匹配任意一个字符

#匹配0个字符或任意多个字符,也就是可以匹配任意多个字符

[] #匹配中括号中的任意一个字符

[-] #匹配中括号中的任意一个字符,- 表示连续字符

[^] #逻辑非,表示不是中括号中的一个字符

bash中其它特殊符号

‘ ’ #单引号,在单引号中所有特殊符号都没有特殊含义

“ ” #双引号,在双引号中所有特殊符号都没有特殊含义,但是“$”调用变量“\”转义符“<code>”引用命令例外&lt;br/&gt;$() #用来引用系统命令 与 “</code> `”反引号作用一致

( ) #用于一串命令执行时,()中的命令会在子shell中运行

{ } #用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形和替换

[ ] #用于变量测试

$ #用于调用变量的值,目前用echo $name的方式得到变量的值

\ #转义符,跟在\后面失去特殊含义,如\$输出的$不能当做变量引用

特殊符号的测试:= #赋值 == #等于 判断字符串的

[ ] 变量测试,正确的数值大小判断

-eq 等于 -ne 不等于

-gt 大于 -lt 小于

-ge 大于等于 -le 小于等于

x=10

[ “$x” -gt 9 ] &amp;&amp; echo yes || echo no #变量尽量用“”包含

[ ] 变量测试,进行字符串的判断

以下命令格式为固定格式:

== [ “$a” == “$b” ] #必须有空格

&lt; [ “$a” &gt;&lt; “$b” ] #可有可无 &lt;= =&gt; [ “$a”&lt;= “$b” ] #不能有空格 =~ [ “$a” =~ “$b” ] #必须有空格 (包含的意思) ( )命令会在子shell中运行 (name=canls;echo $name) pstree 命令显示进程树

#以()中的命令在子shell中运行,不会覆盖或替换当前shell中的变量

{ } 命令会在当前shell中运行

{ name=cangls;echo $name;} 固定格式:左侧{ 与命令有空格,结尾加;

#以{}中的命令会在当前shell中运行,会覆盖或替换当前shell中的变量

bash变量和运算符

变量概念:计算机语言中能储存计算结果或能表示抽象概念,变量可以同过变量名访问,在指令或语言中变量通常是可变的

1)定义变量的规范:

A. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,变量中间不能有空格。如果变量名是“2name”则是错误的

B. 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型

C. 变量用等号连接值,等号左右两侧不能有空格

D. 变量的值如果有空格,需要使用单引号或双引号包括。如:“test="hello world!"”。其中双引号括起来的内容“$”、“\”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符

E. 双引号“ ”括起来的 $ \ `` 都有特殊含

F. 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 "$变量名" 或用 ${变量名} 包含变量名

G. 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令

H. 环境变量名建议大写,易于区分

2)变量的分类:1.用户自定义变量

2.环境变量

3.位置参数变量

4.预定义变量

A)用户的自定义变量

#这种变量是最常见的变量,由用户自由定义变量名和变量的值

变量定义:切记定义变量的规范(空格,名称,引号等)

变量查看:set [选项]

-u #调用没有声明的变量会报错 +u取消

B)环境变量

#这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等

环境变量设置:export AGE=“18” #export声明是环境变量

环境变量查询和删除:

env 查看环境变量

env和set的区别:前者只查看环境变量,后者查看所有变量

unset 变量名 #删除环境变量

C)PATH变量 查找系统命令的路径

D)PS1变量 命令提示符设置

格式:PS1=‘[\u@\h \W]\$ ’ #标准格式

\H:显示完整的主机名。如默认主机名“localhost.localdomain”

\h:显示简写主机名。如默认主机名“localhost”

\t:显示24小时制时间,格式为“HH:MM:SS”

\T:显示12小时制时间,格式为“HH:MM:SS”

\A:显示24小时制时间,格式为“HH:MM”

\@:显示12小时制时间,格式为“HH:MM am/pm”

\u:显示当前用户名

\v:显示Bash的版本信息

\w:显示当前所在目录的完整名称

\W:显示当前所在目录的最后一个目录

#:执行的第几个命令

\$:提示符。如果是root提示符为“#”,如果是普通用户提示符为“$”

E)LANG语言变量

配置文件/etc/sysconfig/i18n 语系更改工具xdg-user-dirs-gtk-update

#查询当前所用语言查询 locale 命令

F)位置参数变量

#这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的

$n #n为数字,$0代表命令本身,$1-$9代表1-9个参数,10以上用${10}

#利用位置参数编写简单计算器 运算符格式:$(())

$ #这变量代表命令行中所有参数,$把所有参数看为一个整体

$@ #这变量代表命令行中所有参数,不过$@把所有参数区分对待

$# #这变量代表命令行中所有参数的个数

G)预定义变量

#是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

$? #最后一次执行命令的返回状态,如果值为0证明上一个命令执行正确,反则上个命令执行出错

#执行复杂命令时,命令结束后“echo $?”查看上面命令执行时是否有报错

$$ #当前进程的进程号(PID)

$! #后台运行的最后一个进程的进程号(PID)

H)接收键盘输入

格式:read [选项] [变量命]

-p 提示信息 : 在read等待时输入的信息

-t 秒数 : 在read等待的秒数

-n 字符数 : read最多能接收的字符数

-s :隐藏输入信息

#假如特殊选项不换行,用echo来实现换行

变量名定义:

 变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY

 如果只提供了一个变量名,则整个输入行赋予该变量

 如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有值

Shell的运算符

数值的运算方法,用declare声明变量类型

格式:declare [-/+] [选项] 变量

: 给变量设定类型

: 取消变量的类型

-a : 将变量声明成数组型

-i : 将变量声明成整数型

-r : 将变量声明成只读(变量值不能修改和删除,不能取消只读选项)

数组变量:相同类型元素的集合体,同是数字或字母

可以存放N个值,通过数组下标进行多个值之间的分割

#[0]为零时,变量就是本身

用expr和let数值运算工具

1)expr运算工具的格式:

#相对了解就好,直到expr是运算工具

2)let运算工具的格式:

3)let还能进行自增增减法或指定增加减少数值

A. 自增&amp;自减格式:

B. 指定增减值格式:指定增减值可以自由调整

使用“$((运算式))”或“$[运算式]”格式进行运算

#两个格式都可以进行数值运算,看个人习惯

两个运算格式:$((运算式)) 在shell脚本中常见

Shell常用的运算符

#运算符的优先级“()的优先级最高”,就是当有多个运算符同时存在时,谁先进行数值计算,但是有时也是有特殊情况的

例如:A.加减乘除

B.取模(取余)运算

#取模运算和取余运算绝大部分是重叠的,但一个是计算机术语,一个是数学概念,区别在于取模运算对负数处理不太一样(被除数为负值时,结果为负,除数正负值不影响结果的正负值)

C.逻辑与运算

#逻辑与(0与1)运算结果0与任何数都得0,只有1与1得1

环境变量的配置文件

#登录系统时生效的环境变量配置文件

 /etc/profile

 /etc/profile.d/*.sh

 ~/.bash_profile

 ~/.bashrc

 /etc/bashrc

文件的调用顺序是:

在用户登录过程先调用/etc/profile文件在这个环境变量配置文件中会定义这些默认环境变量:

 USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值是当前用户)。

 LOGNAME变量:根据USER变量的值,给这个变量赋值。

 MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名。

 PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包含/sbin、 /usr/sbin和/usr/local/sbin这三个系统命令目录。

 HOSTNAME变量:更改主机名,给这个变量赋值。

 HISTSIZE变量:定义历史命令的保存条数。

 umask:定义umask默认权限掩码。注意/etc/profile文件中的umask权限是在“有用户登录过程(也就是输入了用户名和密码)”时才会生效。

 调用/etc/profile.d/*.sh文件,也就是调用/etc/profile.d/目录下所有以.sh结尾的文件。

 这个目录中所有以.sh结尾的文件都会被/etc/profile文件调用,这里最常用的就是lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件。/etc/sysconfig/i18n这个文件眼熟吗?就是我们前面讲过的默认语系配置文件。

 调用了~/.bashrc文件。

 在PATH变量后面加入了“:$HOME/bin”这个目录。那也就是说,如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入“~/bin”目录,就可以直接执行脚本,而不用通过目录执行了。

 定义默认别名,所以我们把自己定义的别名也放入了这个文件。

 调用/etc/bashrc

 PS1变量:也就是用户的提示符,如果我们想要永久修改提示符,就要在这个文件中修改

 umask:定义umask默认权限。这个文件中定义的umask是针对“没有登录过程(也就是不需要输入用户名和密码时,比如从一个终端切换到另一个终端,或进入子Shell)”时生效的。如果是“有用户登录过程”,则是/etc/profile文件中的umask生效。

 PATH变量:会给PATH变量追加值,当然也是在“没有登录过程”时才生效。

 调用/etc/profile.d/.sh文件,这也是在“没有用户登录过程”是才调用。在“有用户登录过程”时,/etc/profile.d/.sh文件已经被/etc/profile文件调用过了。

这样这五个环境变量配置文件会被依次调用,那么如果是我们自己定义的环境变量应该放入哪个文件呢?如果你的修改是打算对所有用户生效的,那么可以放入/etc/profile环境变量配置文件;如果你的修改只是给自己使用的,那么可以放入~/.bash_profile或~/.bashrc这两个配置文件中的任一个。

可是如果我们误删除了这些环境变量,比如删除了/etc/bashrc文件,或删除了~/.bashrc文件,那么这些文件中配置就会失效(~/.bashrc文件会调用/etc/bashrc文件)。那么我们的提示符就会变成:

登录显示信息配置文件

/etc/issue #在用户登录前显示Linux版本和内核版本

/etc/issue #再远程登录也可以看到欢迎信息,也是在用户登录前显示

/etc/motd #该文件也是用户登录欢迎提示信息,在用户登录后显示需要自己编辑

上一篇: 作业