Vim 编辑器
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
a 键与 i 键分别是在光标后面一位和光标当前位置切换到输入模式,而 o 键则是在光标的下面再创建一个空行,此时可敲击 a 键进入到编辑器的输入模式。
Shell 脚本
Shell 脚本命令的工作方式有两种:交互式和批处理。交互式用户每输入一条命令就立即执行;批处理由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本中诸多的命令。
使用 Vim 编辑器把 Linux 命令按照顺序依次写入到一个文件中,就是一个简单的脚本。第一行的脚本声明(#!)用来告诉系统使用哪种 Shell 解释器来执行该脚本;第二行的注释信息(#)是对脚本功能和某些命令的介绍信息。此外,第二种运行脚本程序的方法是通过输入完整路径的方式来执行(需要为脚本文件增加执行权限)。
bash example.sh
#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al
Shell 内设了用于接收参数的变量,变量之间可以使用空格间隔。$0 对应当前 Shell 脚本程序的名称,$# 对应总共有几个参数,$* 对应所有位置的参数值,$? 对应上一次命令的执行返回值,$1、$2、$3……分别对应着第 N 个位置的参数值。
条件表达式
条件测试语法:[ 条件表达式 ] 判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。可以分为 4 种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句。(条件表达式两边均应有一个空格)
# 判断/etc/fstab 是否为一般文件
[ -d /etc/fstab ]
echo $?
# 若存在则输出 Exist 字样
[ -e /dev/cdrom ] && echo "Exist"
[ $USER = root ] || echo "user"
[ ! $USER = root ] || echo "administrator"
[ ! $USER = root ] && echo "user" || echo "root"
[ 10 -gt 10 ]
echo &?
free -m | grep Mem: | awk '{print $4}'
字符串比较语句经常用来判断某个变量是否未被定义(即内容为空值)。
[ -z $String]
[ $LANG != "en.US" ] && echo "Not en.US"
流程控制语句
1)if 条件测试语句: if、then、elif、else、fi
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
#!/bin/bash
# /dev/null 是一个被称作 Linux 黑洞的文件
# 把输出信息重定向到这个文件等同于删除数据
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
#!/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
2)for 条件循环语句:for … in 、do、done
#!/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
3)while 条件循环语句:while、do、done
#!/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
4)case 条件测试语句:case…in、)、esac
#!/bin/bash
read -p "请输入一个字符,并按 Enter 键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
计划任务服务程序
计划任务分为一次性计划任务(写成“at 时间”的形式,查看已设置好但还未执行的一次性计划任务使用“at -l”命令;将其删除用“atrm 任务序号”),与长期性计划任务(创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”)。
# 交互式编写
at 23:30
at > systemctl restart httpd
at > # 此处请同时按下 Ctrl + D 组合键来结束编写计划任务
# 使用管道非交互式
echo "systemctl restart httpd" | at 23:30
crontab -e
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot