#编写shell脚本
##1.编写简单脚本
#!/bin/bash
#for example by masf
pwd
ls -al
###内容简介:
第一行 脚本声明(#!)告诉系统使用哪种shell解释器执行该脚本
第二行 注释信息(#) 对脚本功能和某些命令的介绍
第三行开始 写执行的命令
###执行方式:
1.bash解释器运行脚本
[root@localhost ~]# bash example1.sh
2.通过输入完整路径运行脚本,需要修改权限
[root@localhost ~]# chmod u+x example1.sh 增加可执行权限
[root@localhost ~]# ./example1.sh
##2.接收用户的参数
1.Linux内设了用于接收参数的变量,变量之间使用空格间隔
2.$0 对应的是当前脚本程序的名称
3.$1、$2..... 分别对应第N个位置上的参数值
4.$* 对应所有位置上的参数值
5.$? 对应上一次命令的返回结果
6.$# 参数的个数
###脚本样例
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数是$1,第五个参数是$5."
### 执行结果
[root@localhost ~]# bash example2.sh one two three four five six
当前脚本名称为example2.sh
总共有6个参数,分别是one two three four five six
第一个参数是one,第五个参数是five.
##3. 判断用户的参数
###条件测试语句
分类:
文件测试语句
逻辑测试语句
整数值比较语句
字符串比较语句
格式:
测试语句格式: [ 条件表达式 ]
说明:条件表达式左右都有一个空格
###条件测试参数
文件测试的参数及作用
-d 测试文件是否为目录
-e 测试文件是否存在
-f 测试文件是否是一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
逻辑测试语句
&&(逻辑与) && 符号前的命名为true,执行&&后命令
||(逻辑或) || 符号前的命令为false,执行||后命令
! (逻辑非)
整数比较运算符参数及作用
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
字符串比较运算符参数及作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
###测试样例
[root@localhost ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@localhost ~]# echo $FreeMem
941
[root@localhost ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient memory"
Insufficient memory
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
##4.流程控制语句
###if 条件测试语句
####测试样例:
1.if条件语句判断/media/cdrom目录是否存在,存在就结束条件和整个脚本;不存在创建目录
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
2.验证某台主机是否在线
参数解释:
-c 设置尝试次数
-i 每个数据包的发送间隔
-W 设置超时时间
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 $> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is on-line"
else
echo "Host $1 is off-line"
fi
3.多分支if语句来判断用户输入的分数在哪个成绩区间内
参数解释
read 用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量
-p 用于向用户显示一定的提示信息
#!/bin/bash
read -p "Enter your score (0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is excellent"
elif [ $GRADE -ge 70 ] && [$GRADE -le 84] ; then
echo "$GRADE is pass"
else
echo "$GRADE is Fail"
fi
###for条件循环语句
####功能
允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,适合处理的数据有范围
####语法结构
for 变量名 in 取值列表
do
命令序列
done
####测试样例
参数解释
id 用户名 命令查看用户的信息
$? 判断命令是否执行成功,即用户是否已经存在
/dev/null 是一个黑洞文件,把输出信息重定向到这个文件等同于删除数据
1.从列表文件中读取多个用户名,然后逐一创建用户账户并设置密码
#!/bin/bash
read -p "Enter the users password:" PASSWD
for UNAME in `cat users.txt`
do
id $UNAME $> /dev/null
if [ $? -eq 0 ]
then
echo "already exists"
else
useradd $UNAME $> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME $> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , create success"
else
echo "$UNAME , create failure"
fi
fi
done
###while条件循环语句
####语法结构
while 条件测试操作
do
命令序列
done
####测试样例
参数解释
$RANDOM 随机产生 0-32767之间的整数
expr命令 取得结果
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品的实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜的价格数据:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是$PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
###case条件测试语句
####语法结构
case 变量值 in
模式1)
命令序列1
;;
模式2
命令序列2
;;
*)
默认序列
esac
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z] |[A-Z])
echo "您输入的是 字母"
;;
[0-9])
echo "您输入的是数字"
;;
*)
echo "您输入的是 空格、功能键或其他控制符"
esac
##5.计划任务程序服务
###计划任务分类
一次性计划任务:今晚11点30分开启网站服务
长期性计划任务:每周一的凌晨3点25分把/home/xxxx 目录打包备份为 backup.tar.gz
###一次性计划任务
设置任务 at 时间
查看任务 at -l
删除任务 atrm 任务序号
###周期性计划任务
Linux系统使用crond服务
crontab -e 创建、编辑计划任务
crontab -l 查看计划任务
crontab -r 删除某条计划任务
crontab -u 编辑他人的计划任务(需要管理员登录)
crontab设置任务参数及作用
分 取值为0-59的整数
时 取值为0-23的整数
日 取值为1-31的任意整数
月 取值为1-12的任意整数
星期 取值为0-7的整数(0/7均是周日)
命令 要执行的命令或脚本
###测试样例
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
###注意事项
在参数配置中,可以以#开头写上注释信息
计划任务中的分字段必须有数值,不能是空或*
日与星期字段不能同时使用,否则会发生冲突
编写简单shell脚本
最新推荐文章于 2022-12-03 20:09:08 发布