** Shell **
- Shell 的工作形式分为两种:
1.交互式(Interactive):用户输入一条命令,Shell解释并执行一条。
2.批处理(Batch):用户事先编写一个Shell脚本(Script),其中包含诸多命令,Shell会一次执行完所有命令
- Shell 脚本是将各种命令通过逻辑语句组合而成的程序:
** 查看系统中所有可用的Shell解释器 **
cat /etc/shells
** 查看当前的Shell解释器 **
echo $SHELL
** 编译简单的脚本 **
** Shell脚本的编写要使用到Vim文本编辑器,按照命令的执行顺序依次编写,每行写一条Linux命令。并且一个完整的Shell脚本则应该包括 “脚本声明”、“注释信息”、“可执行语句”。**
- 脚本声明(#!):告知系统用何种shell来解释。
- 注释信息(#):对可执行语句或程序功能做介绍,可以不写
- 可执行语句:执行的具体命令。
例子:
vim Example.sh
# for Example
pwd
ls -al
运行有三种方式
- 脚本文件路径:./Example.sh
- sh脚本文件路径: sh Example.sh
- source脚本文件路径: source Example.sh
接收用户的参数
命令名 参数1 参数2 参数3
Shell 预定义变量
- $0 -房钱执行Shell脚本的程序名
- 1 − 9 , 1-9, 1−9,{10},${11}… -参数的位置变量
- $# -一共有多少个参数
- $* -所有位置变量的值
- $? -判断上一条命令是否执行成功,0为成功,非0为失败
判断用户的参数
-
测试语句格式:[ 条件表达式 ] —括号两边均有一个空格
-
细分测试语句有:文件测试、逻辑测试、整数值比较、字符串比较
文件测试:
[ 操作符 文件或目录名 ]
- 操作符:
- -d --测试是否为目录
- -e --测试文件或目录是否存在
- -f --判断是否为文件
- -r --测试当前用户是否有权限读取
- -w --测试当前用户是否有权限写入
- -x --测试当前用户是否有权限执行
例子
[ -e /dev/cdrom ] && echo "Exist"
符号&&代表逻辑上的"与",当前面的命令执行成功才会执行后面的命令,判断 /dev/cdrom 设备是否存在,若存在则输出Exist。
逻辑测试:[ 表达式1 ] 操作符 [ 表达式2 ]
- 操作符:
- && -逻辑的与,“而且”的意思
- || -逻辑的或,“或者”的意思
- ! -逻辑的否
例子
[ $USER!=root ] && echo "user" || echo "root"
整数值比较:
[ 整数1 操作符 整数2 ]
- 操作符:
- -eq --判断是否等于
- -ne --判断是否不等于
- -gt --判断是否大于
- -lt --判断是否小于
- -le --判断是否等于或小于
- -ge --判断是否大于或等于
字符串比较:
[ 字符串1 操作符 字符串2 ]
- 操作符:
- = -比较字符串内容是否相同
- != -比较字符串内容是否不同
- -z -判断字符串内容是否为空
例子
[ $LANG != "zh_CN.UTF-8" ] && echo "not zh_CN.UTF-8" || echo $LANG
条件测试语句
if条件语句 -分为单分支结构、双分支结构、多分支结构
- 单分支:
if 条件测试操作
then 命令序列
fi
- 双分支:if、then、else、fi
例子
vim example.sh
#!/bin/bash
# check ping
ping -c 3 -i 0.2 -W 3 $1 &> err.txt
if [ $? != 0 ]
then
echo "Host:$1 is down"
else
echo "Host:$1 is up"
fi