手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

简单而有效的Linux Shell脚本示例(续三)

[日期:2020-05-02] 来源:Linux公社  作者:醉落红尘 [字体: ]

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系统上进行移植。

简单而有效的Linux Shell脚本示例(续三)

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  '

简单而有效的Linux Shell脚本示例(续三)

好,通过简单的几行代码,就实现了我想要的效果了。

31、sleep命令

sleep命令允许您的shell脚本在指令之间暂停。在许多情况下(例如执行系统级作业),它很有用。下一个示例显示了Shell脚本中运行的sleep命令。

#!/bin/bash
echo "要等多长时间?"
read time
sleep $time
echo "等待了$time秒!"

简单而有效的Linux Shell脚本示例(续三)

该程序将暂停最后一条指令的执行,直到$time,在这种情况下由用户提供。

32、等待wait命令

wait命令用于从Linux bash脚本暂停系统进程。请查看以下示例,以详细了解它在bash中的工作方式。

#!/bin/bash
echo "测试等待命令"
sleep 5 &
pid=$!
kill $pid
wait $pid
echo $pid 被终止了。

 简单而有效的Linux Shell脚本示例(续三)

自己运行该程序以查看其工作原理。

33、显示最近更新的文件

有时您可能需要查找某些操作的最新更新文件。以下简单程序向我们展示了如何使用awk命令在bash中执行此操作。它将列出当前工作目录中的最后更新或创建的文件。

#!/bin/bash

ls -lrt | grep ^- | awk 'END{print $NF}'

简单而有效的Linux Shell脚本示例(续三)

为了简单起见,我们将避免在此示例中描述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

简单而有效的Linux Shell脚本示例(续三) 

可以看出,数据统计是准确的。

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脚本。

简单而有效的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用户。

简单而有效的Linux Shell脚本示例(续三)

39、从文件中删除重复的行

文件处理需要花费大量时间,并在许多方面影响管理员的工作效率。在文件中搜索重复项可能会成为一项艰巨的任务。幸运的是,您可以使用简短的Shell脚本来完成此操作。

#! /bin/sh

echo -n "输入文件名-> "
read filename
if [ -f "$filename" ]; then
sort $filename | uniq | tee linuxidc.txt
else
echo "$pwd当前所在目录中没有$filename ...再试一次"
fi
exit 0

上面的脚本逐行遍历文件,并删除所有重复的行。然后,它将新内容放入新文件中,并保持原始文件完整。

简单而有效的Linux Shell脚本示例(续三)

总结

Linux Shell脚本可以像您想象的那样多种多样。在确定它可以做什么或不能做什么的时候,实际上是没有限制的。如果您是Linux的新手,我们强烈建议您掌握这些基本的bash脚本示例。您应该调整它们,以更清楚地了解它们的工作方式。我们已经尽力为您提供了现代Linux bash脚本所需要的所有基本知识。为了简单起见,我们没有涉及一些技术问题。但是,对于许多人来说,本指南应该是一个很好的起点。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2020-05/163089.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款