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、从文件中删除反复的行