Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

Vim 编辑器

命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本
  a 键与 i 键分别是在光标后面一位和光标当前位置切换到输入模式,而 o 键则是在光标的下面再创建一个空行,此时可敲击 a 键进入到编辑器的输入模式。
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

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 个位置的参数值。
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

条件表达式
条件测试语法:[ 条件表达式 ] 判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。可以分为 4 种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句。(条件表达式两边均应有一个空格)
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

# 判断/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"

Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

[ 10 -gt 10 ] 
echo &?
free -m | grep Mem: | awk '{print $4}'

  字符串比较语句经常用来判断某个变量是否未被定义(即内容为空值)。
Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

[ -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

Linux 笔记 03 Vim 编辑器与 Shell 命令脚本

crontab -e
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
上一篇:[C]遍历目录下所有文件


下一篇:Shell编程之条件语句