a: 切换到光标下一位输入
i: 切换到光标当前位
o: 切换到光标下一行输入
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
例:[root@dq]# vim 文件名.sh 创建一个脚本文件
命令模式下参数作用
参数 | 作用 |
---|---|
YY | 复制光标所在行 |
DD | 删除光标所在行 |
5DD | 删除光标所在行的5行 |
P | 粘贴 |
U | 撤销操作 |
:wq!(强制保存并退出)
带参数的脚本
"$0" 脚本名称
"$1" 第一个参数
"$#" 参数个数
"$*" 所有的参数
"$?" 判断上一条命令是否执行成功 0---成功 非0----不成功
&& 若前面命令执行成功,则执行后面
|| 若前面命令执行失败,则执行后面
! 取反
例 [ $USER = root ] && echo “ADMIN” || echo “USER”
**编写一个简单的脚本!!!**
[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。
判断用户输入的参数及条件表达式
按照测试对象来划分,条件测试语句可以分为4种:
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句。
文件测试所用的参数
操作符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
整数比较参数
参数 | 含义 |
---|---|
-eq | 是否= |
-ne | 是否!= |
-gt | 是否> |
-lt | 是否< |
-le | 是否<= |
-ge | 是否>= |
例 [root@dq]# [ 10 -gt 10 ]
[root@dq]# echo $?
1
判断变量是否已被使用
[ -z $变量名 ]
echo $?
0—没有使用
1—已使用
流程控制语句
1、if条件控制语句
if [ 条件测试语句 ]
then
命令
fi
例 [root@dq]# #!/bin/bash
if [ ! -e /media/haha ]
then
mkdir -p /media/haha
fi
//判断目录是否存在,不存在就创建目录
for case使用举例来说明
#!/bin/bash
#ping3次 间隔0.2秒 最大响应时间3秒
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null //输出过程到黑洞文件中
if [ $? -eq 0 ]; then //如果上次命令执行成功,显示主机在线
echo "$1 is online"
else //否则显示离线
echo "$1 is offline"
fi
判断成绩脚本
#!/bin/bash
read -p "Enter:" 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
批量生成用户脚本
#!/bin/bash
read -p "Enter a passwd:" PASSWD
for UNAME in `cat user.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
一个小游戏
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
while true
do
read -p "Enter:" INT
let TIMES++
if [ $INT -eq $PRICE ];then
echo “Good”
echo "$TIMES"
exit 0
elif [ $INT -gt $PRICE ];then
echo "High"
else
echo "Low"
fi
done
case使用举例脚本
#!/bin/bash
read -p "Enter:" Key
case "$Key" in
[a-z]|[A-Z])
echo "字母"
;;
[0-9])
echo "数字"
;;
*)
echo "Error"
esac
计划任务
1、单次计划任务
at 时间
命令
(完成后按ctrl+D)
2、删除计划任务
at-l (查看计划任务)
atrm 序号
3、多次计划任务
crond为服务名称
crontab为配置工具
crontab -e //打开计划任务
规则
分 时 日 月 星期 命令
30 * * * * ls -l
//每30分钟执行一次 ls -l命令
本章总结:
1.Vim编辑器的三种模式分别是什么?
答:命令模式、末行模式与输入模式(也叫编辑模式或插入模式)。
2.怎么从输入模式切换到末行模式?
答:需要先敲击Esc键退回到命令模式,然后敲击冒号(:)键后进入末行模式。
3.一个完整的Shell脚本应该哪些内容?
答:应该包括脚本声明、注释信息和可执行语句(即命令)。
4.分别解释Shell脚本中$0与$3变量的作用。
答:在Shell脚本中,$0代表脚本文件的名称,$3则代表该脚本在执行时接收的第三个参数。
5.if条件测试语句有几种结构,最灵活且最复杂的是哪种结构?
答:if条件测试语句包括单分支、双分支与多分支等三种结构,其中多分支结构是最灵活且最复杂的结构,其结构形式为if…then…elif…then…else…fi。
6.for条件循环语句的循环结构是什么样子的?
答:for条件循环语句的结构为“for 变量名 in 取值列表 do 命令序列 done”,如图4-20所示。
7.若在while条件循环语句中使用true作为循环条件,那么会发生什么事情?
答:因条件测试值永久为true,因此脚本中循环部分会无限地重复执行下去,直到碰到exit命令才会结束。
8.如果需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?
答:case条件语句。
9.Linux系统的长期计划任务所使用的服务是什么,其参数格式是什么?
答:长期计划任务需要使用crond服务程序,参数格式是“分、时、日、月、星期 命令”。