Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
Shell 经过了POSIX的标准化,所以它是可以在不同的Linux系统上进行移植。
30、展示进度百分比
在需要处理一个几万行的文件的时候,需要处理的时间是比较长的。现在实现一个展示进度百分比的脚本。
# 定义变量 i
i=1
# 获取 linuxidc.log 这个文件的行数,并把运行结果赋予变量 l
l=$(wc -l linuxidc.log | sed 's/^[ \t]*//g' | cut -d ' ' -f1)
# 每行遍历循环
while read line; do
# 输出百分比
echo -en "\b\b\b\b"`echo $i*100/$l | bc `'%'
# 计算 i++
((i++))
# 传入 linuxidc.log 这个要处理的文件
done < linuxidc.log
# 完成时打个OK,因为字符长度不足以遮盖原先的百分比,所以后面加了几个空格
echo -e '\b\b\b\bOK '
好,通过简单的几行代码,就实现了我想要的效果了。
31、sleep命令
sleep命令允许您的shell脚本在指令之间暂停。在许多情况下(例如执行系统级作业),它很有用。下一个示例显示了Shell脚本中运行的sleep命令。
#!/bin/bash
echo "要等多长时间?"
read time
sleep $time
echo "等待了$time秒!"
该程序将暂停最后一条指令的执行,直到$time,在这种情况下由用户提供。
32、等待wait命令
wait命令用于从Linux bash脚本暂停系统进程。请查看以下示例,以详细了解它在bash中的工作方式。
#!/bin/bash
echo "测试等待命令"
sleep 5 &
pid=$!
kill $pid
wait $pid
echo $pid 被终止了。
自己运行该程序以查看其工作原理。
33、显示最近更新的文件
有时您可能需要查找某些操作的最新更新文件。以下简单程序向我们展示了如何使用awk命令在bash中执行此操作。它将列出当前工作目录中的最后更新或创建的文件。
#!/bin/bash
ls -lrt | grep ^- | awk 'END{print $NF}'
为了简单起见,我们将避免在此示例中描述awk的功能。您只需复制此代码即可完成任务。
34、系统维护
我经常使用一些Linux Shell脚本来升级系统,而不是手动执行。下面的简单shell脚本将向您展示如何执行此操作。
#!/bin/bash
echo -e "\n$(date "+%d-%m-%Y --- %T") --- 开始工作\n"
apt-get update
apt-get -y upgrade
apt-get -y autoremove
apt-get autoclean
echo -e "\n$(date "+%T") \t 脚本终止"
该脚本还处理不再需要的旧软件包。您需要使用sudo运行此脚本,否则它将无法正常工作。
35、获取文件数或目录数
Linux shell统计目录下文件数与目录数有多少。
#!/bin/bash
#脚本名称 dir
#定义一个函数fun_directory
fun_directory() {
let "filenum=0"
let "dirnum=0"
for i in $( ls )
do
if [ -d $i ]
then
let dirnum+=1
else
let filenum+=1
fi
done
echo "目录数是 $dirnum"
echo "文件数是 $filenum"
}
#调用函数
fun_directory
可以看出,数据统计是准确的。
36、清理日志文件
下一个简单的示例演示了我们可以在现实生活中使用shell脚本的便捷方法。该程序将只删除/ var / log目录中存在的所有日志文件。您可以更改保存此目录的变量,以清除其他日志。
#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > messages
cat /dev/null > wtmp
echo "清理日志。"
记住要以root身份运行此Linux Shell脚本。
37、使用Bash备份脚本
Shell脚本提供了一种可靠的方式来备份文件和目录。以下示例将备份最近24小时内已修改的每个文件或目录。该程序利用find命令执行此操作。
#!/bin/bash
BACKUPFILE=backup-$(date +%m-%d-%Y)
archive=${1:-$BACKUPFILE}
find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."
exit 0
备份过程成功后,它将打印文件和目录的名称。
38、检查您是否为root用户
以下示例演示了一种从Linux bash脚本中查找用户是否为root用户的快速方法。
#!/bin/bash
ROOT_UID=0
if [ "$UID" -eq "$ROOT_UID" ]
then
echo "你是 root 用户"
else
echo "你不是 root 用户"
fi
exit 0
该脚本的输出取决于运行它的用户。它将基于$UID匹配root用户。
39、从文件中删除重复的行