搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
盐析白兔
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
PNPM 安装_powershell安装npm
2
python抓取招聘信息_sojob
3
大模型做时序预测也很强!华人团队激活LLM新能力,超越一众传统模型实现SOTA_大模型预测
4
解读AI大模型,从了解token开始_大模型token 举例子
5
Linux 服务器 TCP 连接数参数调整_linux tcp连接数设置
6
密码功能实现示例_实现基于对称算法的mac
7
牛客网笔试题-求最小公倍数_求两个数的公倍数牛客网
8
IDEA中改了代码,但Git不能commit、不能push怎么解决?_idea git commit 无反应
9
数据可视化Axure大屏原型制作分享
10
【C++】一文理清override,overload,overwrite_c++ overwrite
当前位置:
article
> 正文
linux shell编程实例总结
作者:盐析白兔 | 2024-08-10 21:13:34
赞
踩
linux shell编程实例总结
1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数。
find ./ -size +500M -type f | tee file_list | wc -l
2.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
for filename in `find /tmp -type f -name "abc*"|head -n 100`
do
sed -n '1p' $filename>>new
done
3.把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
grep -xvf a b | tee c | wc -l
4.判断一文件是不是块或字符设备文件,如果是将其拷贝到 /dev 目录下
read -p "input a file:" filename
if [ -b $filename -o -c $filename ]
then
cp $filename /dev/
fi
5.每隔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
6.从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段
grep -E 'WARNING|FATAL' a.log | grep -v IGNOR | awk -F ":" '{print $5}'
7.编写一个脚本,进行简单<nobr style="border-bottom:rgb(102,0,255) 1px dotted; line-height:19px; background-color:transparent; color:rgb(102,0,255); font-size:14px; text-decoration:underline"></nobr>的减法运算,要求提示输入变量
#!/bin/bash
read -p "input a number:" num1
read -p "input another number:" num2
let "num3=num1-num2"
echo $num3
8.
把某个目录下的文件扩展名改为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
9.从网上下载一个文件,保存到指定目录
#!/bin/bash
url=http://rs1.bn.163.com/ent/2009/05/20_canquedege.wma
dir=~/下载
wget -P $dir $url
10.判断一个数是不是完数。打印出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
11.以行为单位,求文件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
12.在某个文件夹下查找含有指定字符串的文件
#!/bin/bash
for file in $(ls $2)
do
bname=$(grep -l $1 $2/$file)
basename $bname
done
调用方法:./tst 000 bash#在文件夹bash中查找含有“000”的文件。
13.添加一个新组为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
14.实现自动删除50个账号的功能。账号名为stud1至stud50
#!/bin/bash
i=0
while [ i -le 50 ]
do
let i++
userdel -r stud$i
done
15.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
(5)在早晨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
16.设计一个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 &
17.有一普通用户想在每周日凌晨零点零分定期备份/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 &
18.设计一个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
19.一个文件内容全部是类似
【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'
20./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
]
∗
[
0
−
9
]
∗
.dat/\1/') #取出序列号
i=$(echo $i | sed 's/^0*
[
0
−
9
]
∗
[
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
21.要求:在一个脚本中完成这个程序
1.从文件user.list中取出已给定的用户名和用户组,将这些用户和组按规则添加到系统中
2.从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
原文地址http://www.zhangyiqun.cn/115.html
22.比较两个小数大小。
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
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/盐析白兔/article/detail/960446
推荐阅读
article
linux
-
conda
环境
安装
配置教程_
linux
中用
conda
安装
的
hifiasm
还需要
安装
依赖吗...
【代码】
linux
-
conda
环境
安装
配置教程。_
linux
中用
conda
安装
的
hifiasm
还需要
安装
依赖吗
linux
...
赞
踩
article
Linux
Git
——
Git
版本控制
详解 &
Git
Lab部署配置及使用_
linux
git
配置连接...
本文详细介绍了
Git
的分布式
版本控制
特性,包括工作区、暂存区和版本库的概念,以及添加、提交、回退等基本操作。同时,对比了...
赞
踩
article
【Linux】
git
push
的报错问题 fatal: Authentication
failed
...
Username后面填邮箱!_
linux
git
authentication
failed
for
linux
git
...
赞
踩
article
【
Linux
】通过分配
虚拟
内存
的方式来
解决
因
内存
不够而导致部署的
项目
自动
挂掉
_
linux
服务
器
上总是...
(6)这样配置,每次
服务
器
重启,就没了,所以设置开机自动挂载 Swap 分区,编辑文件 /etc/fstab,在下面加入...
赞
踩
article
怎么
在
windows
、
linux
、
mac
上
安装
pnpm
呢?_
mac
pnpm
...
如果您不使用独立脚本或 @
pnpm
/exe 来
安装
pnpm
,则需要
在
系统上
安装
Node.js(至少 v16.14)。...
赞
踩
article
Linux
CentoS
安装
RabbitMQ
:一键
安装
指南_
linux
部署
mq
...
详细介绍了如何在
Linux
CentOS系统上手动
安装
Erlang和
RabbitMQ
,并提供了一键
安装
指南。通过本文,学...
赞
踩
article
Linux
--网络层
IP
...
IP
协议的主要功能是,并且能够在各种不同的物理网络上工作。
IP
协议为每个网络上的设备分配一个唯一的地址,即
IP
地址。这个...
赞
踩
article
【Linux】Ubuntu20.04解决
网卡
、
显卡
驱动
不正确的
问题
_
ubuntu
网卡
驱动
...
新买了电脑后,安装Ubuntu18.04后,触摸板
驱动
没有,于是安装新版本Ubuntu20.04解决此
问题
,但20的版本...
赞
踩
article
Linux
:
Xshell
相关
配置
及前期准备
_
xshell
硬件
配置
...
使用云服务器不仅环境搭建简单, 避免折腾, 同时还有一个最大的好处, 部署在云服务器上的项目可以直接被外网访问到, 这个...
赞
踩
article
【
xshell
】
linux
:
xshell
远程连接
linux
服务器
安装
maven
_下载
安装
mv...
目录一、jdk准备二、
maven
下载三、
maven
上传并解压到
linux
上四、配置
maven
的环境变量五、查看
maven
...
赞
踩
article
【每天
一个
Linux
命令
】
ssh
命令
_
ssh
-p...
SSH(Secure SHell)是用于远程登录和安全通信的客户端程序,支持加密和端口转发。
命令
格式包括指定用户、主机、...
赞
踩
article
Linux
下远程使用
ssh
远程登陆
另一台主机并
执行命令
_
ssh
-
c
带有括号问题...
工具:expextexpe
c
t 是什么,怎么用?expe
c
t是一个免费的编程工具语言,用来实现自动或者交互式任务通信,无...
赞
踩
article
【
Linux
命令
详解 |
pwd
命令
】
Linux
系统中用于显示
当前工作
目录的
命令
_
pwd
命令
lin...
pwd
命令
是
Linux
中的基础
命令
之一,使用该
命令
可以快速查看
当前工作
目录。在掌握
Linux
命令
时,
pwd
命令
是必不可少...
赞
踩
article
linux
ssh
远程
计算机
,
linux
基础命令(
SSH
管理
远程
主机
)...
本文详细介绍了在Linux系统中配置静态IP、网关、DNS以及使用
SSH
进行安全
远程
连接的步骤。包括编辑网络配置文件、设...
赞
踩
article
Linux
adduser
命令
教程:如何添加新
用户
(附实例详解和
注意事项
)...
adduser
是
Linux
系统中的一个
命令
行工具,用于创建新的
用户
。它是useradd这个底层工具的一个更友好的前端。当...
赞
踩
article
Yapi
部署
指南:
在
Linux
上
Yapi
教程...
众所周知,我们平时使用的服务器,大部分都是基于
Linux
系统的,所以把 YApi
部署
在
Linux
上的话,更加贴...
赞
踩
article
Linux
:
账号
和
权限
管理
(一)...
Linux
的
账号
和
权限
管理
。
Linux
基于用户身份对资源访问进行控制。
Linux
:
账号
和
权限
管理
(一) ...
赞
踩
article
linux
终端
选择
VT100
VT102
VT200
Xterm
linux
Vshell 等都...
在 Linux 系统中,
终端
类型通常指的是
终端
模拟器或
终端
控制程序所支持的特定功能和行为的集合。不同的
终端
类型支持不同的...
赞
踩
article
linux
docker
安装
gitlab
后忘记
root
密码
如何找回...
docker
安装git 忘记
root
密码
如何重新设置。
linux
docker
安装
gitlab
后忘记
root
密码
如...
赞
踩
article
linux
011 注释
13
:
缺页
中断
,
新设计艺术团队第二版
,
第四章
4
-39 至
4
-...
(
13
3)
4
-
4
2 函do_no_page。
linux
011 注释
13
:
缺页
中断
,
新设计艺术团队第二版
,
第四章
4
-...
赞
踩
相关标签
conda
gitlab
git
代码规范
私有仓库
linux
运维
服务器
windows
macos
centos
rabbitmq
tcp/ip
Ubuntu
20.04
显卡
网卡
驱动
linux安装maven
maven的下载和安装
ssh