Shell重要

快捷键
【移动光标】
Ctrl+A 标移到行首。它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用。
Ctrl+E 把光标移到行尾。它在多数文本编辑器和 Mozilla 的 URL 字段内都可使用。

Alt+F 光标向前移动一个单词
Alt+B 光标向后移动一个单词

Ctrl+F 光标向前移动一个字符,相当与->
Ctrl+B 光标向后移动一个字符,相当与<–

Esc+B 移动到当前单词的开头
Esc+F 移动到当前单词的结尾

【屏幕操作】
CTRL+U 向上滚动半屏
CTRL+D 向下滚动半屏
[Ctrl] + [l] = 清屏。该快捷操作与在命令行键入 clear 作用相同。

【剪切、删除、粘贴】
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)[行尾]

Ctrl+Y 粘贴刚才所删除的字符

Ctrl+c 删除整行

Ctrl+d 删除光标所在处字符 Ctrl+h 删除光标所在处前一个字符

Ctrl+w 剪切光标所在处之前的一个词(以空格、标点等为分隔符) Alt+d 剪切光标之后的词 Esc+w 删除光标所在处之前的字符至其单词尾(以空格、标点等为分隔符)

【字符编辑】
Alt+u 把当前词转化为大写
Alt+l 把当前词转化为小写
Alt+c 把当前词汇变成首字符大写
Ctrl+v 插入特殊字符,如Ctrl+v+Tab加入Tab字符键(输入控制字符 如Ctrl+v ,会输入M)
Esc+t 颠倒光标所在处及其相邻单词的位置
Ctrl+t 颠倒光标所在处及其之前的字符位置,并将光标移动到下一个字符( 交换光标前两个字符)
Alt+t 交换当前与以前单词的位置
Ctrl+(x u) 按住Ctrl的同时再先后按x和u,撤销刚才的操作


命令生效的顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

echo
-e 支持反斜线控制的字符转换
\字符
\a 输出警告
\b 退格键,向左删除
\n 换行符
\r 回车键
\t 制表符,也就是Tab键
\v 垂直制表符
\0nnn 按照八进制ASCII码表输出字符,其中0为数字0.nnn是三为八进制数
\xhh 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数

[root@A10 ~]# echo -e "hell\bo"
helo
[root@A10 ~]# echo -e "h\te\tl\nl\to"
h e l
l o
[root@A10 ~]# echo -e "\x48\x45\x4c\x4c\x4f"
HELLO

输出内容加颜色
格式:
echo -e "\e[1;31m 内容 \e[0m "
#输出颜色:
30m=黑色 31m=红色 32m=绿色 33m=黄色
34m=蓝色 35m=洋红 36m=青色 37m=白色

/e[1;31m 开启颜色显示
/e[0m 结束颜色显示
[root@A10 ~]# echo "I LOVE LINUX"
I LOVE LINUX
[root@A10 ~]# echo -e "\e[1;31m I LOVE LINUX \e[0m"
I LOVE LINUX #红色

[root@A10 ~]# bash hello.sh #可以不用赋予权限执行
天上掉下个林妹妹


变量:
变量名必须以字母或下划线开头,名字中间只能由字母、数字和下划线组成
变量名的长度不能超过255个字符
变量名在有效的范围内必须是唯一的
在bash中,变量的默认类型都是字符串型
变量等号两边不能有空格

在任何系统中,目录名、文件名、变量名都要由含义

变量覆盖:
[root@A10 ~]# x1=0
[root@A10 ~]# echo $x1
0
[root@A10 ~]# x2=$1"456"
[root@A10 ~]# echo $x2
456

变量叠加:
[root@A10 ~]# x3="$x2"789
[root@A10 ~]# echo $x3
456789

变量查询:set
-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)
删除变量:unset 变量名
[root@A10 ~]# unset x1
[root@A10 ~]# unset x2
[root@A10 ~]# unset x3

添加环境变量(环境变量可以在所有bash使用,自定义变量只可以在当前bash使用)
环境变量查询:env
export 变量名
[root@pxe253 ~]# x1=0001
[root@pxe253 ~]# x2=0202020
[root@pxe253 ~]# export x1
[root@pxe253 ~]# export x2
[root@pxe253 ~]# export x3=005

PS1变量:
\d:显示日期,格式为“星期 月 日”
\H:显示完整的主机名
\t:显示24小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\$:提示符,如果时root用户会显示提示符为“#",如果时普通用户会显示提示符为“$“

当前语系查询
locale #查询系统语系
LANG :定义系统主语系的变量(临时生效)
LC_ALL:定义整体语系的变量(重启后生效)
查看当前语系
[root@19:46 pxe253 ~ #]echo $LANG
zh_CN.UTF-8 #中文

查看当前系统支持的所有语系(more 方便查看也可以用less)
[root@19:46 pxe253 ~ #]locale -a | more


位置变量: 作用
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需
要用大括号包含,如${10}

$* 这个变量代表命令行中所有的参数,$*把所有的参数堪称一个整体

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

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

$(($1+$2)) #求和运算


预订义变量
$? 最后一词执行的命令的返回状态,返回为0标示执行正确,非0标示错误

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

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

接收键盘输入
read [选项] [变量名]
-p “提示信息”:在等待read输入时,输出提示信息
-t 秒数 :read命令会以值等待用户的输入,使用此选项可以指定等待时间
-n 字符数 :read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,使用与机密信息的输入

输出重定向:
命令 > 文件 2>&1 以覆盖的方式把正确和错误输出都保存在一个文件中
命令 >> 文件 2>&1 以追加的方式将正确输出和错误输出都保存在一个文件中
命令 &> 文件 以覆盖的方式把正确和错误输出都保存在一个文件中
命令 &>> 文件 以追加的方式将正确输出和错误输出都保存在一个文件中
命令 >> 文件1 2>> 文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

wc 统计命令
-c 统计字节数
-w 统计单词数
-l 统计行数

输入重定向
命令 < 文件把文件作为命令的输入
命令<< 标示符
当执行以上格式命令后,会提示再次输入,知道再次输入标示符才结束此次输入


逻辑符(命令与逻辑符之间需要空格分开):
多命令执行符 格式 作用
; 命令1 ; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系

&& 命令1 && 命令2 逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行

|| 命令1 || 命令2 逻辑或
当命令1执行不正确,则命令2才会执行
当命令1正确执行,则命令2不会执行

常用
[root@pxe253 ~]# ls && echo yes || echo no
[root@pxe253 ~]# lsaa && echo yes || echo no

管道符:
| 命令1|命令2 命令1输出的结果作为命令2的操作对象

可以用在多命令的符号

通配符 作用
? 匹配任意一个字符

* 匹配0个或任意多个字符,也就是可以匹配任何内容

[] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者
是a,或者是b,或者是c

[-] 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写
字母

[^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是
数字的字符。

其他特殊符号
'' 单引号。在单引号中的所有的特殊字符,如“$”和“`”(反引号)都没有特
殊含义

"" 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是
例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义

`` 反引号。反引号阔起来的内容是系统命令,在Bash中会先执行它。和$()作用
一样,不过推荐使用$(),因为反引号非常容易看错

$() 和反引号的作用一样,用来引用系统命令

# 在Shell脚本中,#开头的行代表注释

$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到
变量的值。

\ 转义符,根在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输
出“$”符号,而不是当作变量引用

Shell运算符
shell的缺点:弱类型 :默认字符串型

declare命令 声明变量类型
格式:declare [+/-] [选项] 变量名
- :给变量设定类型属性
+ :取消变量的类型属性
-a :将变量声明为数组型
-i :将变量声明为整数型
-x :将变量声明为环境变量 #与export作用相似,但是最终执行的命令为declare
-r :将变量声明为只读变量 #只读变量不允许修改变量值,不允许删除。不能取消。
-p :显示指定变量的被声明的类型 #不加变量名查询所有的变量名

# aa=11
# bb=22
# cc=$aa+$bb
# echo $cc
11+22
# declare -i cc=$aa+$bb #声明变量cc为整数型,他的值为aa+bb
# echo $cc
33

数组型变量
内部储存多个变量值,每个变量的编号名为下标
# shuzu[0]=zp #[]里面的内容代表下标
# shuzu[1]=tp
# declare -a shuzu[2]=live
# echo ${shuzu[*]} #查看时需要大括号将变量括起来
zp tp live

数值运算
expr与let
[root@pxe253 ~]# a=11
[root@pxe253 ~]# b=22
[root@pxe253 ~]# dd=$(expr $a + $b) #expr使用格式
[root@pxe253 ~]# echo $dd
33

[root@pxe253 ~]# cc=$(($a+$b)) # $((变量1+变量2 ))使用方法
[root@pxe253 ~]# echo $cc
33

运算符 数值越大,优先级越高
优先级 运算符 说明
13 +-,+ 单目负,单目正
12 !,~ 逻辑非,按位取反或补码
11 *,/,% 乘,除,取模(取余数)
10 +,- 加,减
9 <<,>> 按位左移,按位右移
8 <=,>=,<,> 小与等与,大与等与,小与,大与
7 ==,!= 等与,不等于
6 & 按位与
5 ^ 按位异或
4 | 按位或
3 && 逻辑与
2 || 逻辑或
1 =,+=,*=,/=,%=,&=,^=,|=,<<=,>>= 赋值,运算且赋值

案例:
[root@pxe253 ~]# yy=$(( 4+9*3/5 ))
[root@pxe253 ~]# echo $yy
9 #注:运算中有小数将自动忽略

[root@pxe253 ~]# yy=$(( (4+9)*3/5 ))
[root@pxe253 ~]# echo $yy
7
[root@pxe253 ~]# yy=$(( (4+9)*3%5 )) # %取余数,只显示余数
[root@pxe253 ~]# echo $yy
4 #39不能被5整除,所与余数是4

[root@pxe253 ~]# yy=$(( 1 && 0 ))
[root@pxe253 ~]# echo $yy
0 #逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0


逻辑或,除非两边都为0,否则它的值是1
[root@pxe253 ~]# yy=$(( 1 || 1 ))
[root@pxe253 ~]# echo $yy
1
[root@pxe253 ~]# yy=$(( 1 || 0 ))
[root@pxe253 ~]# echo $yy
1
[root@pxe253 ~]# yy=$(( 2 || 0 ))
[root@pxe253 ~]# echo $yy
1
[root@pxe253 ~]# yy=$(( 9 || 0 ))
[root@pxe253 ~]# echo $yy
1
[root@pxe253 ~]# yy=$(( 0 || 0 ))
[root@pxe253 ~]# echo $yy
0

正则表达式:是用于描述字符排列和匹配模式的一种语法规则。(它主要用于字符串的模式分割、匹配、查找及替换操作。 )

正则表达式与通配符
-正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
-通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

基础正则表达式
元字符 作用
* 前一个字符匹配0次或任意多次

. 匹配出了换行符外任意一个字符

^ 匹配行首。例如:^hello会匹配以hello开头的行

$ 匹配行尾。例如:hello$会匹配以hello结尾的行

[] 匹配中括号中指定的任意一个字符,只匹配一个字符。输出整个字符串
例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一位数字,[a-z][0-9]匹
配小写字母和一位数字构成的两位字符。

[^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9]匹配任意一位非数字
的字符,[^a-z]表示任意一位非小写字母

\ 转义符,用于将特殊符号的含义取消

\{n\} 表示其前面的字符恰好出现n次。例如:[0-9]\4{4\}匹配4位数字,[1][3-8]
[0-9]\{9\}匹配11位手机号码

\{n,\} 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及两位以上的数

\{n,m\} 表示其前面的字符至少出现n次,最大出现m次。例如:[a-z]\{6,8\}匹配6到8
位的小写字母


使用详例:
s..d 代表匹配在s和d之间有任意两个字母的字符串
s.*d 代表s和d之间匹配任意字符(所有内容)
^$ 代表匹配空白行
^[a-z] 匹配用小写字母开头的行
^[^a-z] 匹配不用小写字母开头的行
^[^a-zA-Z] 匹配不用(包括大小与小写)字母开头的行

[0-9]$ 匹配用数字结尾的行

 

posted @ 2019-04-29 00:34  安于夏  阅读(117)  评论(0编辑  收藏  举报