如何运行一个shell脚本
脚本运行需要执行权限,当我们给一个文件赋予执行权限后,该脚本就可以运行。
#chmod u+x filename
如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予执行权限的脚本bash fiename
#bash filename
shell的特殊符号
~: 家目录 # cd ~ 代表进入用户家目录
!: 执行历史命令 !! 执行上一条命令
$: 变量中取内容符
+ - * \ %: 对应数学运算 加 减 乘 除 取余数
&: 后台执行
*: 星号是shell中的通配符 匹配所有
?: 问号是shell中的通配符 匹配除回车以外的一个字符
;: 分号可以在shell中一行执行多个命令,命令之间用分号分割
|: 管道符 上一个命令的输出作为下一个命令的输入 cat filename | grep "abc"
\: 转义字符
``: 反引号 命令中执行命令 echo "today is `date +%F`"
' ': 单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量
" ": 双引号,脚本中出现的字符串可以用双引号引起来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMCBXCsG-1631951110863)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830110953244.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cvhtotx9-1631951110866)(https://raw.githubusercontent.com/Thobian/typora-image/master/demo/202109/06/153815-656171.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9E6SvhZ-1631951110871)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830111354743.png)]
shell管道
| 管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成输出。管道符其实就是下一个命令对上一个命令的输出做处理。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmBTjchh-1631951110874)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830111705411.png)]
shell重定向
> 重定向输入 覆盖原数据
>> 重定向追加输入,在原数据的末尾添加
< 重定向输出 wc -l < /etc/passwd
<< 重定向追加输出 fdisk /dev/sdb <
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guQxMsi6-1631951110875)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830112101137.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enUejQdt-1631951110878)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210830112126824.png)]
shell数学运算
expr 命令:只能做整数运算,格式比较古板,注意空格
[root@baism ~]# expr 1 + 1
2
[root@baism ~]# expr 5 - 2
3
[root@baism ~]# expr 5 \* 2 #注意*出现应该转义,否则认为是通配符
10
[root@baism ~]# expr 5 / 2
2
[root@baism ~]# expr 5 % 2
1
使用bc计算器处理浮点运算,scale=2代表小数点保留两位
[root@baism ~]# echo "scale=2;3+100"|bc
103
[root@baism ~]# echo "scale=2;100-3"|bc
97
[root@baism ~]# echo "scale=2;100/3"|bc
33.33
[root@baism ~]# echo "scale=2;100*3"|bc
300
双小圆括号运算,在shell中(( ))也可以用来做数学运算
[root@baism ~]# echo $(( 100+3))
103
[root@baism ~]# echo $(( 100-3))
97
[root@baism ~]# echo $(( 100%3))
1
[root@baism ~]# echo $(( 100*3))
300
[root@baism ~]# echo $(( 100/3))
33
[root@baism ~]# echo $(( 100**3)) #开方运算
1000000
退出脚本
exit NUM 退出脚本,释放系统资源,NUM代表一个整数,代表返回值。
echo命令
echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 该命令的一般格式为:echo [ -n ]字符串
其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加 引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中 的各个单词作为字符串输出,各字符串之间用一个空格分割。
功能说明:显示文字。
命令选项:
-n不要在最后自动换行
-e若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
转义字符
\a发出警告声;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTejbpvF-1631951110881)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831151539457.png)]
\b删除前一个字符;
\c最后不加上换行符号;
\f换行但光标仍旧停留在原来的位置;
\n换行且光标移至行首;
\r光标移至行首,但不换行;
\t插入tab;
\v与\f相同;
\插入\字符;
\nnn插入nnn(八进制)所代表的ASCII字符;
–help显示帮助–version显示版本信息
read命令
默认接受键盘的输入,回车符代表输入结束
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNO979S7-1631951110883)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831152654802.png)]
read 命令选项
-p打印信息
-t限定时间
-s不回显
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Ww7FoEf-1631951110885)(C:\Users\htuser\Desktop\笔记\shell\shell.assets\image-20210831152835275.png)]
-n输入字符个数
shell变量
定义在文件中属于永久变量
临时变量(关闭终端和重启后消失)
shell数组
多数赋值
单数赋值
查看数组
!
关联数组
可以自定义数组的标识
if判断
在shell中对小数点识别不太友好,可以用以下方法进行判断
字符串比较运算
运算符解释,注意字符串一定别忘了使用引号引起来
== 等于
!= 不等于
-n 检查字符串的长度是否大于0
-z 检查字符串的长度是否为0
逻辑运算
逻辑与运算 &&
逻辑或运算 ||
逻辑非运算 !
文件比较与检查
-d 检查文件是否存在且为目录
-e 检查文件是否存在
-f 检查文件是否存在且为文件
-r 检查文件是否存在且可读
-s 检查文件是否存在且不为空
-w 检查文件是否存在且可写
-x 检查文件是否存在且可执行
-O 检查文件是否存在并且被当前用户拥有
-G 检查文件是否存在并且默认组为当前用户组
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
if语法
适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。
语句格式
if [ condition ] #condition 值为true or false
then
commands
fi
该语句翻译成汉语大意如下:
假如 条件为真
那么
执行commands代码块
结束
适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。
语句格式
if [ condition ]
then
commands1
else
commands2
fi
该语句翻译成汉语大意如下:
假如条件为真
那么
执行commands1代码块
否则
执行commands2代码块
结束
if高级用法
条件符号使用双圆括号,可以在条件中植入数学表达式
通过代码来看下吧
使用双方括号,可以在条件中使用通配符
通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串
for循环
for var in value1 value2 ......
do
commands
done
接下来看段代码吧,循环输出1-9数字
seq数数工具
代码演示
代码执行结果
控制循环
!
加上参数 ping -c 次数 ip &> 输入
跳出循环
while语法
while [ condition ] #注意,条件为真while才会循环,条件为假,while停止循环
do
commands
done
read:输入信息
多条件循环
linux shell中"2>&1"含义
在计划任务中经常可以看到。例如我们公司的计划任务举例:
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1
对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。