一.shell基础
1.shell脚本的执行方式
1.1 echo(打印)
格式:echo 'nihao‘ #把nihao打印出来'
1.1.1 -e 添加后可以反斜杠控制字符转换
控制字符 | 作用 |
---|---|
\\ | 输出\本身 |
\n | 换行 |
\t | tab制表符 |
1.1.2 -e 输出颜色
格式:echo -e "\e[31m 内容 \e[0m"
字符 | 颜色 |
---|---|
30m | 黑色 |
31m | 红色 |
32m | 绿色 |
33m | 黄色 |
34m | 蓝色 |
35m | 洋红色 |
36m | 青色 |
37m | 白色 |
1.2 read(接受键盘输入)
变量承接:read -p “请输入指定内容” name #这里name就承接上用户输入的值了,注意name和前面的有空格相隔
- -p(prompt-提示) ‘提示信息’ 表示在等待输入时的提示信息
- -t 表示等待时间
- -s 表示隐藏输入的信息
1.3 第一个脚本
内容:开头必须写 #!bin/bash
赋予权限:chmod 755 xx.sh
执行:①当前目录bash xx.sh
②其它目录bash /tmp xx.sh
2.bash脚本基本功能
2.1 alias(别名)
格式:alias 别名=’原命令‘ #这里只能临时生效
别名永久生效:vim /root/.bashrc
删除别名:unalias 别名
查看别名状态数目:alias
说明:命令执行顺序优先级
- 先执行绝对路径或者相对路径执行的命令。
- 其次是执行别名。
- 第三顺序是bash内部命令。
- 第四顺序按$PATH环境变量定义的目录来查找。
2.2 输出重定向
格式:命令 &> 文件 #无论是否输出都保存到指定文件,特别说明>表示覆盖添加;>>表示追加添加
2.3 多命令执行
符号 | 作用 |
---|---|
; | 按逗号分隔的顺序执行 |
&& | 逻辑与,当命令1正确命令2才能执行 |
|| | 逻辑或,当命令1错误命令2正确执行;命令1正确命令2不执行 |
2.4 管道符
格式:a | b
解释:命令a作为命令b的对象
举例:ls | more
比如ls很长多于一页这样写就能像more阅读文件一页翻页看。
2.5 特殊符号
符号 | 作用 |
---|---|
’ ’ | 里面所有的内容都没有特殊含义比如$ |
" " | 部分特殊符号没有特殊含义,但是如$有特殊含义 |
` ` | 反引号,里面填写系统命令 |
$() | 里面填写系统命令 |
$ | 用来打印变量使用 |
3.bash变量
3.1 用户自定义变量
解释:只能在当前shell中显示。
添加:name=5
查询:set
去除变量:unset 变量名字
3.2 环境变量
解释:可以在所有的shell中显示。
添加:export name=5
查询:env
去除变量:unset 变量名字
3.3 位置参数变量
符号 | 作用 |
---|---|
$n | n表示数字,当n>10需要写为${n} |
$* | 表示所有参数,把所有变量看为一个整体(配合for使用) |
$@ | 表示所有参数,把每个变量区分对待(配合for使用) |
解释:
a.sh
#!bin/bash
echo $1
echo $2
命令行:bash a.sh 1 2
输出:
1
2
3.4 预定义变量
符号 | 作用 |
---|---|
$? | 最后一次执行任务返回状态,如果为0表明上一步正确执行;不为0表示上一步执行失败。 |
$$ | 当前进程的进程号 |
3.5 运算
解释:bash默认的类型都是字符类型
运算符格式:$[需要运算的内容]
4.字符提取命令
4.1 cut(切割)
格式:cut 选项 文件名
- -f 列号 -提取第几列(fields-领域)
- -d 分隔符-按照指定分隔符分割列(delimiter-分隔符)[默认不加该选项就认为是tab打出的空格]
二.shell编程
1.基础正则表达式
前言:通配符和正则表达式区别。通配符用于文件名称搜索;正则表达式用于文件内容检索。通配符中*
表示任意内容?
表示单个字符。
符号 | 作用 |
---|---|
* | 匹配前面字符0个或者多个 |
+ | 匹配前面字符1个或者多个 |
? | 匹配前面字符0个或一个 |
. | 匹配除了换行符外的任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 只匹配一个字符,如[0-9]匹配一个数字 |
[^] | 表示不匹配什么 |
{n} | 匹配前面字符确定的n次 |
{n,} | 匹配前面字符至少n次 |
{n,m} | 匹配前面字符至少n次最多m次 |
\ | 转义字符 |
格式:grep 正则表达式 文件名称
2.sed(编辑命令)
前言:类似于vim,可以直接通过命令行编辑。
格式:sed 选项 动作 文件的名字
2.1 运算选项
- -e:允许对于多条命令进行编辑
- -i:直接修改文件(不添加的话不会对文件进行任何修改)
- -n:只把经过sed处理的数据输出出来(很关键)
2.2 动作
动作 | 解释 |
---|---|
a | Append-追加在该行后添加一行或多行 |
c | Replace-行替换,c后面的字符串替换原数据行 |
i | Insert-在当前行前添加一行或多行 |
d: | Delete-删除 |
p: | Print-打印 |
s: | String-字符串替换,用一个字符串替代另一个字符串,格式:s/旧字符/新字符/g |
2.3 演示
sed -n 2p a.txt
表示打印出a.txt的第二行sed -i 2d a.txt
表示删除第二行sed -i '1a hello jack' a.txt
表示在第一行后追加写上’hello jack’sed -i '2c jkl' a.txt
表示把第二行替换为jklsed -i '1s/nihao/root/g' a.txt
表示把第一行的nihao替换为root
3.条件判断
3.1 文件类型
内容 | 解释 |
---|---|
-d | directory-判断目录是否存在,存在为真。 |
-e | exists-判断文件是否存在,存在为真。 |
-f | file-判断文件是否存在,存在为真。 |
格式:[ -e 1.txt ]#判断1.txt是否在当前目录下(注意中括号周围的空格)
3.2 文件权限
缺点:不能判断哪个用户组用有该权限,只要有一个用户组用于该权就返回真。
内容 | 解释 |
---|---|
-r | 判读是否有读的权限 |
-w | 判断是否有写的权限 |
-x | 判断是否有操作的权限 |
3.3 数字间的比较
内容 | 解释 |
---|---|
-eq | 相等(equal) |
-ne | 不相等(not equal) |
-gt | 大于(greater than) |
-lt | 小于(less than) |
-ge | 大于等于(greater equal) |
-le | 小于等于(less equal) |
3.4 字符串间的判断
内容 | 解释 |
---|---|
-z 字符串 | 判断字符串是否为空(zero) |
-n 字符串 | 判断字符串是否为不空(no-zero) |
== | 判断两个字符串是否相等(两个符号与内容直接要有空格不然无法判断) |
!== | 判断两个字符串是否不相等(两个符号与内容直接要有空格不然无法判断) |
注意:以上都是用于[]
,切记空格的保持。
4.流程控制
4.1 if控制语句
格式①:
if [条件判断式子]
then
content
elif [条件判断式子]
then
content
else
content
fi
注意:if和elif后面都必须跟着then
4.2 case语句
格式①:
case $变量 in
"y")
echo 'aa'
;;
'n')
echo 'bb'
;;
*)
echo 'll'
;;
esac
4.3 for语句
格式①:
for i in $()
do
echo $i
done
格式②:
for ((i=1;i<100;i++))
do
命令
done
注意:切记格式②中for后面双小括号内容顺序不可以变化。
4.4 while循环
格式①:
while [ $i -lt 2 ]
do
命令
done
三.shell散记
1.大小写转换
转大写:${a^^}
转小写:${a,,}
2.退出脚本
写入exit
即可
四.shell编程与其它语言区别
- shell主要是为了命令的执行,为了表示
i=i+1
,正确应该写为i=$[$i+1]
,这样命令就会执行赋值给i是可以执行给系统的命令。 - shell比较大小两种方式
[]
and(())
,推荐后者符合其它编程语言习惯但是只能处理数字,前者处理能力强大可字符串可数字可其它功能但必须严格按格式来写注意空格。 - 特殊处:
$()
系统命令;$[]
运算法则;${}
数据处理