Shell语法
2021年4月9日
shell 脚本就是将完成一个任务的所有命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。
如何书写一个 shell 脚本
shell 脚本命名:
名字要有意义,最好不要用 a、b、c、d、1、2、3、4 这种方式命名;虽然 linux 系统中,文件没有扩展名的概念,依然建议用 .sh 结尾;名字不要太长,最好能在 30 个字节以内解决。例如:check_memory.sh
shell脚本格式:
shell 脚本开头必须指定脚本运行环境,以 #! 这个特殊符号组合来组成。例如:#!/bin/bash 来指定该脚本是运行解析由 /bin/bash 来完成的; shell 中的注释使用 # 符号
#shell脚本中,最好加入脚本说明字段
#!/bin/bash
#Author: Admin
#Created Time: 2021/02/02 16:23
#Release: 1.0
#Script Description: first shell study script
如何运行一个 shell 脚本
脚本运行需要执行权限,当我们给一个文件赋予执行权限后,该脚本就可以运行。
[root@localhost ~]# chmod u+x filename #赋予执行权限
[root@localhost ~]# ./filename #执行脚本333
如果不希望赋予脚本执行权限,那么可以使用 bash
命令来运行未给予执行权限的脚本
[root@localhost ~]# bash filename #bash执行脚本
[root@localhost ~]# bash -x filename #-x调试,把每条命令执行情况打印出来
shell 中的特殊符号
有基础的同学不要和正则表达式中的符号含义搞混淆了。
符号 | 说明 |
---|---|
~ | 家目录。# cd ~ 代表进入用户家目录 |
! | 执行历史命令。 !! 执行上一条命令 |
$ | 变量中取内容符 |
+ - * / % | 对应数学运算 加 减 乘 除 取余数 |
& | 后台执行 |
* | 通配符,匹配所有 |
? | 通配符,匹配除回车以外的一个字符 |
; | 分号可以在shell中一行执行多个命令,命令之间用分号分割 |
| | 管道符,上一个命令的输出作为下一个命令的输入 |
`` | 反引号,命令中优先执行反引号内的命令 |
' ' | 单引号,脚本中的字符串可以用单引号引起来,单引号不能解释变量 |
" " | 双引号,脚本中的字符串可以用双引号引起来,双引号可以解释变量 |
shell 中的管道运用
- 管道符 |
管道符在 shell 中使用是最多的,很多组合命令都需要通过组合命令来完成输出。
管道符其实就是下一个命令对上一个命令的输出作处理。
shell 重定向
重定向符号 | 说明 |
---|---|
> | 重定向输入,覆盖原数据。 |
>> | 重定向追加输入,在原数据的末尾添加。 |
< | 重定向输出。例如:wc -l < /etc/passwd |
<< | 重定向追加输出。例如:fdisk /dev/sdb << EOF...................EOF |
shell 数学运算
expr
命令:
只能做整数运算,格式比较古板,注意命令,数字和运算符之间有空格
[root@linux ~]# expr 1 + 1
2
[root@linux ~]# expr 5 - 2
3
[root@linux ~]# expr 3 \* 7 #注意*出现应该转义,否则认为是通配符
21
[root@linux ~]# expr 5 / 2
2
[root@linux ~]# expr 10 % 3
1
bc
命令:
使用 bc
计算器处理浮点运算,scale=2 代表小数点保留两位,quit 退出
[root@linux ~]# echo "scale=2;3+100" | bc
103
[root@linux ~]# echo "scale=2;100-3" | bc
97
[root@linux ~]# echo "scale=2;100/3" | bc
33.33
[root@linux ~]#echo "scale=2;100*3" | bc
300
(( ))
运算:
双小圆括号运算,在 shell 中 (( ))
也可以用来作数学运算
[root@linux ~]#echo $((100+3))
103
[root@linux ~]#echo $((100-3))
97
[root@linux ~]#echo $((100*3))
300
[root@linux ~]#echo $((100/3))
33
[root@linux ~]#echo $((100%3))
1
[root@linux ~]#echo $((10**3)) #开方运算
1000
退出脚本
exit NUM
退出脚本,释放系统资源,NUM 代表一个整数,代表返回值。
- exit 0:正常运行程序并退出程序;
- exit 1:非正常运行导致退出程序;
exit 0
可以告知你的程序的使用者,你的程序是正常结束的。 如果 exit 非0值
,那么你的程序的使用者通常会认为你的程序产生了一个错误。
在shell中调用完你的程序之后,用 echo $?
命令就可以看到你的程序的 exit 值。在 shell 脚本中,通常会根据上一个命令的 $? 值来进行一些流程控制。0 代表程序正确的执行。