Shell脚本
shell脚本概述
shell脚本是利用shell的功能所写的一个程序,这个程序是使用可执行文件,将一些shell的语法和命令写在里面,搭配正则表达式,管道命令与重定向等功能,来达到我们所要的处理的目的
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
shell脚本分类:
/bin/sh
/bin/Bash
/sbin/nologin
/bin/tcsh
/bin/csh
默认使用bash shell
shell脚本编程规范
编写第一个脚本
[root@localhost ~]# vim test.sh
#!/bin/bash //声明
<<ABC //注释
这是我第一个脚本
作者:xzw
ABC //注释结束。必须和<<后的注释一致
echo "hello world" //脚本内容
[root@localhost ~]# chmod +x test.sh //赋予脚本执行权限
[root@localhost ~]# ./test.sh
hello world
不添加权限可执行脚本:
bash test.sh
sh test.sh
source test.sh=. test.sh
- bash -x test.sh :逐行检测语法问题
- bash -n test.sh :检查语法错误。
重定向操作
重定向输入:
< :从指定的文件读取数据,而不是从键盘输入
重定向输出:
> :将输出结果保存到指定文件,会覆盖文件原内容
>> :将输出结果追加到文件内的尾部
错误重定向:
2> :将错误信息保存到指定文件,覆盖文件内容
2>> :将错误信息追加到指定文件中
&> :将标准输出、标准错误的内容保存到同一个文件中
shell脚本变量
shell变量用来存放系统和用户需要使用的特定参数。这些参数可以根据用户的设定或系统环境的变化而相应变化。
自定义变量
用户自己定义的变量,只在用户自己的shell环境中有效。
定义变量
变量名=变量值
变量名需要以字母或下划线开头。名称中不能出现特殊字符。
查看和引用变量值
通常在变量名前添加前导符号“$”。可以引用变量的值。使用echo命令查看变量,可以在一条echo查看多个变量值
[root@localhost ~]# aa=5
[root@localhost ~]# bb=6
[root@localhost ~]# echo $aa $bb
5 6
unset a :取消赋值。取消变量。取消之后即为空
看系统中所有变量:set
变量赋值的特殊操作
-
双引号 "
双引号主要起界定字符串的作用,特别是当要赋值的内容中包括空格时,必须括起来。
在双引号范围内,使用 $ 符号可以引用其他变量的值(变量的引用),从而能够直接调用现有的值来赋给新的变量。 -
单引号 ’
当药赋值的内容中包括 $ " \ 等具有特殊含义的字符时,应使用单引号。单引号范围内无法引用其他变量的值。 -
反撇号 ``
反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量,反撇号内的必须是可执行的命令行,否则将出错。也可以用$() -
read命令
read可以给变量赋值。read可以结合-p来提示用户。
特殊变量
环境变量
环境变量是由linux系统提前创建的变量。主要用于设置用户的工作环境。环境变量的全局配置文件/etc/profile。在此文件中定义的变量作用于所有用户。env:看所有环境变量
查看当前搜索路径: echo $PATH
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
将脚本加入$PATH
位置变量
当执行命令行操作时,第一个字段表示命令或脚本程序名。其余的字符串按照从左到右的顺序依次赋值给位置变量。位置变量也称为位置参数。使用$1,$2…表示。
预定义变量
预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“ ” 符 号 和 另 一 个 符 号 组 合 表 示 ”符号和另一个符号组合表示 ”符号和另一个符号组合表示#:表示命令行中位置参数的个数。常见预定义变量如下:
$? :表示上一个执行命令,如果上一个命令执行成功了。则输出0.没成功则非0
$*:表示所有位置参数的内容,这些内容当做一个整体$@:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为О表示执行正确,返回任何非О值均表示执行出现异常。
$0:表示当前执行的脚本或程序的名称$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号
算数
expr 1 + 1 :2 加法
expr 2 \* 3 :6 除法
expr 6 / 3 :2 除数取整
expr 10 % 3 :1 除数取余。
echo “scale=2;10/3” =3.33 :除数取两个小数点后
bc中**不能用 平方是^