序
这是我的第一篇技术博文,目的在于总结归纳自己所学,以求模块化、系统化地将知识留存在大脑,也可与好学之人一同交流进步。
测试工程师的技能版图,已从手工测试转向要求左移的代码能力,右移的运维能力,上要求产品思维,下要求广阔知识面,Shell脚本的掌握理所当然成为了必备技能。
求职寒冬从2019年延续到2020年,企业缩编的同时提高门槛,即使像玩笑话所说“面试造飞机”,我们所做的只有不断学习,提升自己。
本系列博文不是教程,亦不是大全,只是学习笔记。
Unix哲学:一条命令做一件事。
Shell脚本:命令的组合。
一、Shell脚本
1.多个命令按序执行,以分号隔开
cd ;ls ;more
2.BASH
在Centos7中默认的Shell为BASH,可用echo $SHELL显示,本文以BASH作为Shell环境。
3.声明(sha-bang)
- 若将脚本写入文件,需在第一行添加声明
#!/bin/bash
4.脚本创建、执行方式
vim filename.sh
chmod u+x filename.sh
bash ./filename.sh #可以不赋权直接执行
./filename.sh #需可执行权限
source ./filename.sh #执行时对当前环境造成影响,不创建子进程,属于外部命令
. filename.sh
二、管道符与重定向
1.管道符
进程通信方式之一:“|”
2.重定向
- 输入重定向:
read var < /path/to/a/file
- 输出重定向:
echo 123 > /path/to/a/file #输出的文件会被先清空再存储
- 错误重定向:
wrongcmd 123 > filename.txt #将报错输出
- 全部重定向:
allcmd & > file.txt
- 组合重定向,并输出为文件
vim filename.sh
#!/bin/bash
cat > /path/to/a/filename.txt << EOF (以EOF结尾)
echo “hello world”
EOF
Bash filename.sh
cat filename.txt(输出为echo “hello world”)
三、变量
- 变量赋值左右不能有空格
1.将命令执行结果赋值给变量
cmd1=$(ls -l /etc)
cmd2=‘ls /root'
2.变量引用
${变量名}或$变量名
3.变量引用范围
- 当前Shell,若想当前终端生效则执行source filename.sh
- export filename 子进程得到父进程的值
4.环境变量
- PATH:命令搜索路径(在当前终端生效)
- 预定义变量:
echo $? #上一条命令是否执行成功
echo $$ #显示当前Shell进程PID
echo $0 #查看当前脚本文件名
echo $1 #传递给当前Shell的第一个参数
四、测试与判断
- test命令,或使用中括号[ ]
1. string1 = string2 #有空格
2. test -f /etc/password #文件是否存在
3. [-d /etc/] #目录是否存在
4. [ 5 -gt 4