查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数

    find ./ -size +500M -type f | tee file_list | wc

在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中

    for filename in `find /tmp -type f -name "abc*"|head -n 100`
do
sed -n '1p' $filename>>new
done

把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数

    grep -xvf a b | tee c | wc -l

判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下

    read -p "input a file:" filename
if [ -b $filename -o -c $filename ]
then
cp $filename /dev/
fi

每隔10分钟监控一次,监控/usr下如果大于5G,发邮件给管理员

    #!/bin/bash
while true
do
sleep 600
n=$(du -s /usr | cut -f1)
if [ $n -gt 5242880 ]
then
mail -s "greater" filwsyl@gmail.com < ~/filename #将文件filename的内容发送出去。
fi
done

从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段

    grep -E 'WARNING|FATAL' a.log | grep -v IGNOR | awk -F ":" '{print $5}'

编写一个脚本,进行简单的减法运算,要求提示输入变量

    #!/bin/bash
read -p "input a number:" num1
read -p "input another number:" num2
let "num3=num1-num2"
echo $num3

把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录

    #!/bin/bash
for file in $(ls $1)
do
new_file=${file%.*}.bat
mv ./$1/$file ./$1/$new_file
tmp=$(date +%y)
tar cvf ./$tmp.tar ./$1
done

从网上下载一个文件,保存到指定目录

    #!/bin/bash
url=http://rs1.bn.163.com/ent/2009/05/20_canquedege.wma
dir=~/下载
wget -P $dir $url

判断一个数是不是完数。打印出1-1000之间的完数。 完数就是约数的和等于自身2倍的数。(6,28,496)

    #!/bin/bash
sub()
{
i=1;
sum=0;
while [ $i -le $num ]
do
let "m=num%i"
if [ $m -eq 0 ]
then
let "sum=sum+i"
fi
let "i=i+1"
done
let "a=2*num"
if [ $a -eq $sum ]
then
echo $num
fi
}
num=1
while [ $num -le 1000 ]
do
sub
let "num = num+1"
done

以行为单位,求文件A和文件B交集,并集,差集。

并集:

    sort -m <(sort A | uniq) <(sort B | uniq) | uniq

交集:

    sort -m <(sort A | uniq) <(sort B | uniq) | uniq -d

差集:

    sort -m <(sort A | uniq) <(sort B | uniq) <(sort B | uniq) | uniq -u

在某个文件夹下查找含有指定字符串的文件

    #!/bin/bash
for file in $(ls $2)
do
bname=$(grep -l $1 $2/$file)
basename $bname
done

调用方法:./tst 000 bash#在文件夹bash中查找含有“000”的文件。

添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30

    #!/bin/bash
groupadd class1
for i in {9901..9930}
do
xx=$(echo $i | sed 's/99//');
useradd -g class1 std$xx -p ""
done

实现自动删除50个账号的功能。账号名为stud1至stud50

    #!/bin/bash
i=0
while [ i -le 50 ]
do
let i++
userdel -r stud$i
done

某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:

  • 在下午4 :50删除/abc目录下的全部子目录和全部文件;
  • 从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
  • 每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
  • 在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
  • 在早晨8:00前开机后启动。
    vim /etc/crontab 在里面增加下面内容:
1)50 16 * * * root rm -rf /abc/* 2>&1 &
2)00 8-18 * * * root cat /xyz/x1|awk '{print $1}' >> /backup/bak01.txt 2>&1 &
3)50 17 * * 1 root cd /data;tar -zcvf backup.tar.gz * 2>&1 &
4)55 17 * * * root umount /hdc 2>&1 &
5)在早晨8:00前开机后启动 --> 这个我不是很明白它的意思,不知道是不是8点前开机就启动上面的设定,8点后才开机就不用启动的意思。姑且用下面这个命令吧。
chkconfig --level 2345 crond on

设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下

    vim /usr/bin/fileback.sh
#!/bin/bash
#fileback.sh
#file executable: chmod 755 fileback.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
filename=`date +%y%m%d`_etc.tar.gz
cd /etc/
tar -zcvf $filename *
mv $filename /root/bak/
------------------------------------------------------
vim /etc/crontab 加入
* * 1 * * root ./fileback.sh &

有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?

首先说一下非root用户编写crontab文件的方法。

一:

    [sword@localhost ~]$ vim cronfile
[sword@localhost ~]$ crontab cronfile

二:

    [sword@localhost ~]$ crontab -e
no crontab for sword - using an empty one
crontab: installing new crontab

查看结果:

[root@localhost cron]# crontab -u sword -l

显示内容是:/var/spool/cron/sword 文件的内容。

    vim ~/shit.sh
#!/bin/bash
cp /user/backup/* /tmp/
--------------------------------------------
crontab -e
0 0 * * 0 ~/shit.sh &

设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行

    #!/bin/bash
for ((i=1;i<=50;i++))
do
mkdir -p /usrdata/user$i
cd /usrdata
chmod 754 user$i
done

一个文件内容全部是类似

【202.205.151.21】--【23:59:22】-“HTTP GET”-“Mozila”

...

写一个SHELL命令找出最多的10个IP

    awk -F "--" '{print $1}' shit | sort | uniq -c | sort -r | sed -n '1,10p'

/tmp路径下有800个文件,文件名的格式是:filename_YYYYMMDD_序列号(从001到999).dat, 例如:filename_20040108_089.dat。现在想把这些文件改名,新文件名的格式是:filename_TODAY(当前日期)_序列号(从500开始,到达999之后从001开始).dat,例如: 把filename_20040108_089.dat改为filename_20041222_589.dat,注意新文件名的序列号的顺序需要和原来的一致,即要做排序处理

    #!/usr/bin/bash
DEST_FILE_PART2="_`date '+%Y%m%d'`_"
EXT_NAME=".dat"
SRC_FILE_LIST=`find /tmp -name "*_*_*$EXT_NAME" -print`
for each in $SRC_FILE_LIST; do
DEST_FILE_PART1=`echo $each | awk -F"_" '{print $1}'`
OLD_NUM=`echo $each | awk -F"_" '{print $3}' | awk -F"." '{print $1}'`
DEST_FILE_PART3=`expr $OLD_NUM + 500`
[ $DEST_FILE_PART3 -gt 999 ] && DEST_FILE_PART3=`expr $OLD_NUM - 499`
&& DEST_FILE_PART3=`printf %03d $DEST_FILE_PART3`
DEST_FILE=$DEST_FILE_PART1$DEST_FILE_PART2$DEST_FILE_PART3$EXT_NAME
echo "mv $each to $DEST_FILE"
mv $each $DEST_FILE
done
我的解法:
#!/bin/bash
new_file=$(date +20%y%m%d);
for file in $(ls ~/bash)
do
i=$(echo "$file" | sed 's/.*_[0-9]*_[0−9]∗.dat/\1/') #取出序列号
i=$(echo $i | sed 's/^0*[0−9]∗/\1/') #去掉序列号前面可能的 ‘0’,
let "ii=i+500"
if [ $ii -gt 999 ]
then
let "ii=ii-999"
fi
ii=`printf %03d $ii` #添上可能需要的‘0’
update=$(echo "$file" | sed 's/.∗_[0-9]*_[0-9]*.dat/\1_'$new_file'_'$ii'.dat/')
mv ~/bash/$file ~/bash/$update
done

要求:在一个脚本中完成这个程序

  • 从文件user.list中取出已给定的用户名和用户组,将这些用户和组按规则添加到系统中
  • 从password.list中读取已经给定的用户密码。

user.list如下:

zhangsan adminuser,dbuser,updatauser

lisi dbuser,updatauser

wanger updatauser,wheel

    #!/bin/bash
#group add
for x in ‘awk ‘{print $2}’ user.list | sed ’s/,/\n/g’ | sort | uniq -c|sed ’s/[^a-zA-Z]//g”
do
groupadd $x &> /dev/null
done
#back message
if (($?==0))
then
echo “Group Ok!!”
else
exit 1
fi
#user add
for i in ‘awk ‘{print $1}’ user.list’
do
for y in ‘awk ‘{print $2}’ password.list’
do
useradd $i &> /dev/null
echo $y | passwd –stdin $i &> /dev/null
done
done
#back message
if (($?==0))
then
echo “User Ok!”
else
exit 1
fi
#add users to groups
for ((q=1;q<=3;q++))
do
usermod -G ‘awk “NR==$q {print $2}” user.list | awk ‘{print $2}” ‘awk “NR==$q {print $1}” user.list | awk ‘{print $1}” &> /dev/null
done
if (($?==0))
then
echo “All Finished!”
fi

比较两个小数大小

    awk -v num1=6.6 -v num2=5.5 'BEGIN{print(num1>num2)?"0":"1"}'
echo "0.14 > 0.15" | bc
expr 1.2 \< 1.3
原文链接 https://blog.csdn.net/lile269/article/details/6658885

【转】linux shell编程实例总结的更多相关文章

  1. linux内核模块编程实例

    linux内核模块编程实例 学号:201400814125 班级:计科141 姓名:刘建伟 1.确定本机虚拟机中的Ubuntu下Linux的版本 通过使用命令uname -a/uname -r/una ...

  2. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  3. 一文学完Linux Shell编程,比书都好懂

    一. Shell 编程 1. 简介 Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务. Shell 既是一种命令语言,又是一种程序设计语言. Shell scr ...

  4. 前端学习 linux —— shell 编程

    前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...

  5. linux —— shell 编程(文本处理)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...

  6. linux —— shell 编程(编程语法)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...

  7. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  8. Linux Shell编程参考大全

    本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...

  9. Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||

    https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...

随机推荐

  1. 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色 实现思路: 在页面的 <body&g ...

  2. Sentry 企业级数据安全解决方案 - Relay 入门

    内容整理自官方开发文档 Sentry Relay 通过提供作为应用程序和 sentry.io 之间中间层的独立服务来提供企业级数据安全性. Relay 专门设计用于: 在将个人身份信息 (PII) 发 ...

  3. Linux配置yum源(离线和在线)

    配置yum源有2种方法,一种是离线yum源,另外一种是在线yum源. 一.离线yum源,基于安装光盘提供的安装仓库. 建立一个属于仓库文件夹 mkdir /media/zidong cd /media ...

  4. 【Warrior刷题笔记】力扣169. 多数元素 【排序 || 哈希 || 随机算法 || 摩尔投票法】详细注释 不断优化 极致压榨

    题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element/ 注意,该题在LC中被标注为easy,所以我们更多应该关 ...

  5. python + requests发起请求,接口返回400,报错“Unexpected character encountered while parsing value: G. Path”

    完整报错信息如下: {'errors': {'': ["Unexpected character encountered while parsing value: G. Path '', l ...

  6. 初识python: 列表(list)

    使用列表函数写一个"购物车"小程序: #!/user/bin env python # author:Simple-Sir # 20180908 ''' 需求: 1.启动程序后,让 ...

  7. [ python应用 ] python递归搜索文件,支持搜索多个文件,支持自定义处理动作

    写了一个PyQT界面的版本:https://github.com/LongchuanYu/pyqt_project PATH = r'E:\MyDocument\新しいフォルダー\' # 要搜索的目录 ...

  8. 新增访客数量MR统计之Reduce和Runner相关准备

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  9. Word2010制作简单个人简历

    原文链接:https://www.toutiao.com/i6489366535050625550/ 以学习使用按钮属性为主,具体样式可以根据个人设置 选择"页面布局"选项卡,&q ...

  10. vue2.0组件库

    UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开 ...