目录

1.按照时间生成文件2018-05-22.log将每天的磁盘使用状态写入到对应日期的文件

[root@web01 ceshi]# cat 1.sh
#!/bin/bash
Date=`date +%F`
dir=/backup
[ -d $dir ] || mkdir -p $dir
df -h >${dir}/$Date.log

2. 统计Nginx日志中每个IP的访问量有多少,日志如下:

[root@web01 ~]# awk '{ip[$1]++} END {for(i in ip){print i,ip[i]}}' access_\(1\).log |sort -rnk2 |head|column -t

[root@web01 ceshi]# cat 2.sh
#!/usr/bin/bash
declare -A access while read line
do
type=$(echo $line|awk '{print $1}')
let access[$type]++
done < /root/driverzeng.com_access.log for i in ${!access[@]}
do
echo " ip是:$i 出现次数是 :${access[$i]}"
done

3.在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件

​ 1.批量修改txt为txt.bak

​ 2.把所有的.bak文件打包压缩为123.tar.gz

​ 3.批量还原文件的名字,及把增加的.bak再删除

[root@web01 ceshi]# cat 3.sh
#!/bin/bash
dir=/backup
#1.判断目录是否存在,不存在则创建
[ -d $dir ] || mkdir -p $dir
#创建10个文件
touch $dir/{1..10}.txt
#批量修改文件名
find $dir -type f -name "*.txt" >$dir/txt.log
#2.使用for循环进行修改名
for i in $(cat $dir/txt.log)
do
mv $i $i.bak
done
#3.打包压缩
tar czf $dir/123.tar.gz $dir/*.bak
#4.批量还原
find $dir -type f -name "*.bak" > $dir/bak.log
for j in $(cat $dir/bak.log)
do
mv $j ${j%.*}
done

4.输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果

[root@web01 ceshi]# cat 4.sh
#!/bin/bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2 echo "$num1 + $num2 = $[$num1+$num2]"
echo "$num1 - $num2 = $[$num1-$num2]"
echo "$num1 x $num2 = $[$num1*$num2]"
echo "$num1 ÷ $num2 = $[$num1/$num2]"
echo "${num1}和${num2}的余是: $[$num1%$num2]"

5.打印下面这句话中字母数小于5的单词** **I am lizhenya teacher I am 18

方法一:
[root@web01 ceshi]# echo "I am lizhenya teacher I am 18"|xargs -n1|awk '{if(length < 5)print}'
I
am
I
am
18
方法二:
[root@web01 ceshi]# cat 5.sh
#!/bin/bash
length='I am lizhenya teacher I am 18' for i in $length
do
[ ${#i} -lt 5 ] && echo $i
done

6. 写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10

[root@web01 ceshi]# cat 6.sh
#!/bin/bash
HISTFILE=~/.bash_history
set -o history
history |awk '{print $2}'|sort|uniq -c|sort -rn|head

7. 将下面的条件表达式改写为if条件语句** [ -f /etc/hosts ] && echo !

[root@web01 ceshi]# cat 7.sh
#!/bin/bash
if [ -f /etc/hosts ];then
echo !
fi

8.写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些**

方法一:
[root@web01 ceshi]# cat 8.sh
#!/bin/bash
for i in {1..254}
do
{
ping -W1 -c1 10.0.0.$i &>/dev/null
rc=$?
if [ $rc -eq 0 ];then
echo -e "\033[32m 10.0.0.$i 存在 \033[0m"
else
echo -e "\033[31m 10.0.0.$i 不存在 \033[0m"
fi
}&
done 方法二:
[root@web01 ceshi]# cat 8-2.sh
#!/bin/bash
source /etc/init.d/functions for i in {1..254}
do
{
ping -W1 -c1 10.0.0.$i &>/dev/null
if [ $? -eq 0 ];then
action "IP 10.0.0.$i 通" /bin/true
else
action "IP 10.0.0.$i 不通" /bin/false &>/dev/null
fi
} &
sleep 0.01
done

9.写一个Shell脚本通过curl命令返回的状态码来判定所访问的网站是否正常,比如当前状态码200,才算正常

[root@web01 ceshi]# cat 9.sh
#!/bin/bash
read -p "请输入网址: " address
state=`curl -sI $address | awk 'NR==1{print $2}'`
if ((state==200));then
echo -e "\033[32m $address 网站正常\033[0m"
else
echo -e "\033[31m $address 无法连接\033[0m"
fi

10.用Shell实现,把一个文本文档中只有一个数字的行给打印出来

[root@web01 ceshi]# cat 10.sh
#!/bin/bash
read -p "请输入要测试的文件: " cc
aa=`cat $cc|wc -l`
for i in `seq $aa`
do
lenth=`sed -n "$i"p $cc |sed s#[^0-9]##g|wc -L`
if [[ $lenth = 1 ]];then
sed -n "$i"p $cc
fi
done

11.查看磁盘/当前使用状态,如果使用率超过80%则把结果输出到/var/log/disk.err

[root@web01 ceshi]# cat 11.sh
#!/bin/bash
date=`date +%F`
use=`df -h|awk 'NR==2{print $(NF-1)}'`
if [ ${use/\%/} -lt 80 ];then
echo "${date}磁盘/使用率正常! 使用率为$use"
else
echo "${date}磁盘/使用率不正常! 使用率为$use" >>/var/log/disk.err
fi

12.脚本用read批量创建10个用户,密码统一为123,需要对用户输入是否为数字和输入的名字是否为空做判断

[root@web01 ceshi]# cat 12.sh
#!/usr/bin/bash
read -p "请输入你要创建的用户前缀: " user
if [ -z $user ];then
echo "请输入有效的值.....再见"
exit
elif [[ $user =~ ^[0-9]+$ ]];then
echo "你输入的是数字...再见 "
exit
else
continue
fi for i in `seq 10`
do
user_name=${user}${i}
useradd $user${i}
echo "用户: ${user}${i} 已创建"
echo "123" | passwd --stdin $user${i} &>/dev/null
done

13.使用case语句编写php-fpm启动脚本

[root@web01 ceshi]# vim  13.sh
. /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING" = "no" ] && exit 0 phpfpm="/usr/local/php-5.3.10/sbin/php-fpm"
prog=$(basename ${phpfpm}) lockfile=/var/lock/subsys/phpfpm start() { art
[ -x ${phpfpm} ] || exit 5
echo -n $"Starting $prog: "
daemon ${phpfpm}
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
} stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
} restart() {
configtest || return $?
stop
start
} reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc ${phpfpm} -HUP
RETVAL=$?
echo
} force_reload() {
restart
} configtest() {
${phpfpm} -t
} rh_status() {
status $prog
} rh_status_q() {
rh_status >/dev/null 2>&1
} case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
exit 2
esac

14.打印一个菜单如下,然后用循环加case语句输出用户输入菜单选项的结果(8分)

h 显示命令帮助

f 显示登陆信息

d 显示磁盘挂载

m 查看内存使用

u 查看系统负载

q 退出程序

[root@web01 ceshi]# cat 14.sh
#!/bin/bash
menu(){
cat<<EOF
----------------------
菜单
----------------------
h 显示命令帮助
----------------------
f 显示登录的信息
----------------------
d 显示磁盘挂载
----------------------
m 查看内存使用
----------------------
u 查看系统负载
----------------------
q 退出程序
----------------------
EOF
}
menu
while true
do
read -p "请输入序号来执行对应: " aaa
case $aaa in
h)
menu
;;
f)
whoami
;;
d)
df -h
;;
m)
free -m
;;
u)
w
;;
q)
exit
;;
*)
echo "傻子,输错了...!"
;;
esac
done

15.生成0-100之间的随机数,并相加,直到大于1000,输出相加的结果

[root@web01 ceshi]# cat 15.sh
#!/bin/bash
while true
do
ran=`echo $((RANDOM%100+1))`
sum=$(($sum+$ran))
if [ $sum -gt 1000 ]
then
echo "结果为 $sum"
break
fi
done

16.判断/tmp目录下是否有大于4k的文件,如果有则输出该文件的大小与创建时间

[root@web01 ceshi]# cat 16.sh
#!/bin/bash
wenjian=`find /tmp -type f -size +4k `
for i in $wenjian
do
if [ -f $i ];then
echo "$(ls -l $wenjian|awk '{print $5,$6,$7,$8,$NF}')"
else
echo "exit"
fi
done

17.检测服务器中重要的文件是否被修改吗如果被修改则报警(使用指纹)

[root@web01 ceshi]# cat 17.sh
#!/binbash
md5sum /root/file > /root/md5sum
while true
do
md5sum -c /root/md5sum &>/dev/null
if (( $?==0 ));then
echo "文件正常"
sleep 10
else
echo "文件修改了"
sleep 10
fi
done

18.防止DOS攻击(检测nignx日志若某个IP短时间的PV过大则使用防火墙将其禁掉)

1.根据日志提取ip和pv数,或者根据网络连接数提ip和pv
2.判断当pv大于你所能接受的最大值时,把此ip加入防火墙中
3.可以结合crontab实现每3分钟执行一次

19.if 判断分数大于等于90分的为优秀,大于等于70的为良好,大于等于60的为及格否则不及格 数字不能为空 最大分数为100分。

[root@web01 ceshi]# vim 19.sh
#!/bin/bash
read -p "请输入你的分数: " fs
if [ $fs -gt 0 -a $fs -lt 60 ];then
echo "补考"
elif [ $fs -ge 60 -a $fs -lt 70 ];then
echo "合格"
elif [ $fs -ge 70 -a $fs -le 90 ];then
echo "良好"
elif [ $fs -ge 90 -a $fs -le 100 ];then
echo "优秀"
else
echo "顽皮"
fi

20.判断软件包是否安装

[root@web01 ceshi]# vim 20.sh
#!/bin/bash
read -p "输入要查的包 :" name
rpm -ql $name>/dev/null
d=`echo $?`
if [ $d -eq "0" ];then
echo "存在"
else
echo "不存在"
fi

21. 判断文件是否存在

```shell
[root@web01 ceshi]# cat fun.sh
#!/bin/bash
fun(){
if [ -f $1 ];then
echo "$1 存在"
else
echo "$1 不存在"
fi
}
fun $1 ```

22.函数内如果执行的上一条是函数名,则不会返回函数本身执行的返回值

[root@web01 ceshi]# cat fun2.sh
#!/bin/bash
fun(){
echo 50
return 1
}
re=`fun`
echo "函数的返回值是: $? "
echo "函数执行的结果是: $re"

[root@web01 ceshi]# cat fun3.sh
#!/bin/bash
fun(){
echo 50
return 1
}
re=`fun`
name=oldboy
echo "函数的返回值是: $? "
echo "函数执行的结果是: $re"

23. 从1加到100

[root@web01 ceshi]# cat sum.sh
#!/bin/bash
i=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum
[root@web01 ceshi]# cat sum2.sh
#!/bin/bash
for i in {1..100}
do
sum=$[i+sum]
let i++
done
echo $sum

shell --08 例子的更多相关文章

  1. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  2. Shell数组例子

    Shell数组例子 循环打印数组,并统计数组的个数: [root@slavedb array]# cat a.sh #!/bin/bash array=( freddy freddie tang sh ...

  3. org.apache.hadoop.util.Shell demo/例子

    package cn.shell; import java.io.IOException; import org.apache.hadoop.util.Shell; public class Shel ...

  4. scala VS python2 操作shell对比例子

    Scala: /** * Created by sunxu on 2015/9/30. */ import scala.sys.process._ import java.io.File //在相应目 ...

  5. Shell脚本例子集合

    # vi xx.sh 退出并保存 # chmod +x xx.sh # ./xx.sh -2. 调试脚本的方法 # bash -x xx.sh 就可以调试了 . -1. 配置 secureCRT 的设 ...

  6. Linux Shell流程例子

    #!/bin/bash read -p "input a dight:"echo $REPLY DATE=`date`echo "DATE is ${DATE}" ...

  7. shell 一些例子

    #!/bin/bash #Filename: password.sh  by:-V love cmx stty -echo #这里表示 开启隐藏在终端的输出 read -p "Enter y ...

  8. shell脚本例子集锦(习题总结)

    练习一:写一个脚本 .设定变量FILE的值为/etc/passwd .依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passw ...

  9. shell脚本例子

    #!/bin/sh   str="####" echo $1 | grep $str 1>/dev/null if [ `echo $?` -eq 0 ] then   ec ...

随机推荐

  1. python tkinter坐标转换

    tkinter中坐标原点在左上角,横坐标向右,纵坐标向下,画图需要将坐标转换成右下角的某个点来符合我们的常用坐标 坐标原点设为(x0,y0),横坐标向右,纵坐标向上,: 转换:想实现坐标点(x,y)的 ...

  2. jmeter性能工具 之 传参 (三)

    jmeter 主要有三种方式:键值对传参,json格式传参,外部传参 1.键值对传参 可以参考上篇登陆,使用的传参方式是键值对传参  2.json 格式传参 用json 格式传参不要忘了加http 头 ...

  3. Java文件处理之FileReader可输出中文字符

    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public ...

  4. POJ 3660 Cow Contest ( 最短路松弛思想应用 && Floyd求传递闭包 )

    题意 : 给出 N 头奶牛在比赛的结果,问你最多的能根据给出结果确定其名次的奶牛头数.结果给出的形式为 A  B 代表在比赛当中 A 战胜了 B 分析 : 对于一头奶牛来说,如果我们能确定其他 N - ...

  5. 牛客多校第一场 Random Point in Triangle

    https://ac.nowcoder.com/acm/contest/881/F 打表代码: #include<bits/stdc++.h> using namespace std; ] ...

  6. HashMap与HashTable的哈希算法——JDK1.9源码阅读总结

    下面是HashTable源码中的put方法: 注意上面注释标注的地方: HashTable对于元素在哈希表中的坐标算法是: 将对象自身的哈希值key.hashCode()变为正数:hash & ...

  7. Mac自带服务器的应用

    Mac OS下自带了apache,方便部署一些静态数据(html,css,js,xml,图片等数据) 一.系统默认路径 系统默认是隐藏apache安装目录的,但我们可以通过“命令行”或者“文件夹前往” ...

  8. MySQL 查询性能优化 - EXPLAIN 命令

    查询优化的官方文档在 这里. EXPLAIN 的输出格式 译文 1. MySQL 架构 1.1 MySQL 的简化架构 MySQL 可以简单的分为三层:连接层.服务层.存储引擎层.其中服务层包含了 M ...

  9. Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)

    在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ...

  10. LeetCode 144. Binary Tree Preorder Traversal 动态演示

    先序遍历的非递归办法,还是要用到一个stack class Solution { public: vector<int> preorderTraversal(TreeNode* root) ...