shell编程案例Word下载.docx
- 文档编号:21149082
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:21.64KB
shell编程案例Word下载.docx
《shell编程案例Word下载.docx》由会员分享,可在线阅读,更多相关《shell编程案例Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
file
if[-c$file-o-b$file];
cp$file/dev/
5.每隔10分钟监控一次,监控/usr下如果大于5G,发邮件给管理员
whiletrue
n=`du-s/usr|cut-f1`
if[$n-gt1];
mail-s"
greater"
295322935@<
c
sleep600
done
6.从a.log文件中提取包含"
WARNING"
或"
FATAL"
,同时不包含"
IGNOR"
的行,然后提取以"
:
分割的第5个字段
grep-E"
WARNING|FATAL"
a.log|grep-v"
|cut-f5-d'
'
7.编写一个脚本,进行简单的减法运算,要求提示输入变量
if[$#=2];
num3=`expr$1-$2`
else
inputanumber:
num1
inputanothernumber:
num2
num3=`expr$num1-$num2`
echo$num3
8.把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。
iftest$#-eq1-a-d$1;
forfilein`ls$1`
mv$file$file.bat
filename=date+%y%m%d
tar-cjvf$filename.tar.bz2
inputdir"
readdir
forfilein`ls$dir`
9.判断一个数是不是完数。
打印出1-1000之间的完数。
完数就是约数的和等于自身2倍的数。
(6,28,496)
(1)
sub()
{
i=1;
sum=0;
while[$i-le$num]
do
let"
m=num%i"
if[$m-eq0]
then
sum=sum+i"
fi
i=i+1"
done
a=2*num"
if[$a-eq$sum]
echo$num
}
num=1
while[$num-le1000]
sub
num=num+1"
(2)
for((i=1;
i<
=1000;
i++))
sum=0
for((j=1;
j<
=i;
j++))
m=`expr$i%$j`
if[$m-eq0];
sum=`expr$sum+$j`
y=`expr$i\*2`
if[$y-eq$sum];
echo$i
10.在某个文件夹下查找含有指定字符串的文件
forfilein`ls$2`
f=`grep-l$1$2$file`
echo$f
调用方法:
./tst000bash#在文件夹bash中查找含有“000”的文件。
11.添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
groupaddclass1
for((i=0;
=30;
if[$i-lt10];
no="
0$i"
$i"
stu$no"
useradd-gclass1stu$no
passwd-dstu$no
chage-d0stu$no
12.实现自动删除50个账号的功能。
账号名为stud1至stud50
=50;
userdel-rstu$i
13.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:
读;
文件所有者的权限为:
读、写、执行;
文件所有者所在组的权限为:
读、执行。
mkdir/userdata
cd/userdata
mkdiruser$i
chmod754user$i
14.一个文件内容全部是类似
【202.205.151.21】--【23:
59:
22】-“HTTPGET”-“Mozila”
...
写一个SHELL命令找出最多的10个IP
awk-F"
--"
'
{print$1}'
shit|sort|uniq-c|sort-r|sed-n'
1,10p'
个人cat$1|cut-c2-15|sort|uniq
15./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`
foreachin$SRC_FILE_LIST;
DEST_FILE_PART1=`echo$each|awk-F"
_"
OLD_NUM=`echo$each|awk-F"
{print$3}'
|awk-F"
."
DEST_FILE_PART3=`expr$OLD_NUM+500`
[$DEST_FILE_PART3-gt999]&
&
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$eachto$DEST_FILE"
mv$each$DEST_FILE
我的解法:
new_file=$(date+20%y%m%d);
forfilein$(ls~/bash)
i=$(echo"
$file"
|sed'
s/.*_[0-9]*_\([0-9]*\).dat/\1/'
)
#取出序列号
i=$(echo$i|sed'
s/^0*\([0-9]*\)/\1/'
#去掉序列号前面可能的‘0’,
ii=i+500"
if[$ii-gt999]
ii=ii-999"
ii=`printf%03d$ii`
#添上可能需要的‘0’
update=$(echo"
s/\(.*\)_[0-9]*_[0-9]*.dat/\1_'
$new_file'
_'
$ii'
.dat/'
)
mv~/bash/$file~/bash/$update
临时:
#
forfilein`ls/tmp`
f1=$(date+20%y%m%d);
f2_1=cat$file|cut-f3-d'
|cut-f1-d'
.'
if[f2_1-lt500];
f2=`expr$f2_1+500`
f2=`expr$f2_1-499`
new_filename="
filename_$f1_$f2.dat"
mv$file$new_filename
个人解法
f2_1=`echo$file|cut-f3-d'
echo$f2_1
if[$f2_1-lt500];
mv/tmp/$file/tmp/$new_filename
16.要求:
在一个脚本中完成这个程序
1.从文件user.list中取出已给定的用户名和用户组,将这些用户和组按规则添加到系统中
2.从password.list中读取已经给定的用户密码。
user.list如下
zhangsanadminuser,dbuser,updatauser
lisidbuser,updatauser
wangerupdatauser,wheel
#groupadd
forxin‘awk‘{print$2}’user.list|sed’s/,/\n/g’|sort|uniq-c|sed’s/[^a-zA-Z]//g”
groupadd$x&
/dev/null
#backmessage
if(($?
==0))
echo“GroupOk!
!
”
exit1
#useradd
foriin‘awk‘{print$1}’user.list’
foryin‘awk‘{print$2}’password.list’
useradd$i&
echo$y|passwd–stdin$i&
echo“UserOk!
#adduserstogroups
for((q=1;
q<
=3;
q++))
usermod-G‘awk“NR==$q{print$2}”user.list|awk‘{print$2}”‘awk“NR==$q{print$1}”user.list|awk‘{print$1}”&
echo“AllFinished!
原文地址
17.比较两个小数大小。
awk-vnum1=6.6-vnum2=5.5'
BEGIN{print(num1>
num2)?
0"
1"
}'
0.14>
0.15"
|bc
expr1.2\<
1.3
18终端取字符
/bin/sh
Inputdatewithformatyyyymmdd:
\c"
readyearmonthday
Todayis$year/$month/$day,right"
pressentertoconfirmandcontinue\c"
reada
Iknowthedate,bye"
注释:
/bin/sh指定解析shell的类型,sh为传统shell,bash为默认使用的shell
\c这个转义字符表示,不换行,只能使用与sh类型的shell
19判断文件类型
if[$#-ne1]
thenecho"
agrciserror"
exit
fi
if[-f$1]
thisisfile"
if[-d$1]
thisisdirctory"
20文件拷贝
echopleaseinput1argument
if[-d$HOME/$1]
echodirctoryisexsit,copying...
mkdir$HOME/$1
flist=`ls`
forfilein$flist
cp$file$HOME/$1
echocopydone
21判断用户是否在线
check_user()
user=`who|cut-f1-d'
fornamein$user
if[$name=$1]
return1
else
return0
}
inputusername:
readname
check_user$name
if[$?
-eq1]
then
usernameisonline"
usernameisoffline"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell 编程 案例