shell_Day01
#!/bin/bash if [ `wc -l /etc/inittab | awk '{print $1}'` -gt 100 ] ;then echo ”/etc/inittab is a big file.” else echo ”/etc/inittab is a small file.” fi
#!/bin/bash if [ `whoami` == "root" ] ;then echo "该用户为管理员" else echo "该用户为普通用户" fi
#!/bin/bash if [ -e $1 ];then echo "存在" else echo "不存在" fi
#!/bin/bash if [ ` grep "bash$" /etc/passwd |cat -n| awk '{print $1}'` -gt 0 ] ;then echo `grep "bash$" /etc/passwd | awk -F ":" '{print $1}'` else echo "没有这类用户" fi
#!/bin/bash `awk '/^$/{print NR}' /etc/inittab` if [ $? -gt 0 ];then echo "有" echo `awk '/^$/{print NR}' /etc/inittab` else echo "没有" fi
#!/bin/bash # B=`grep -n "^[[:space:]]*$" /etc/inittab | wc -l` C=`grep -n "^[[:space:]]*$" /root/abc | cut -d: -f1` if [ $B -eq 0 ] ; then echo "没有空白行" exit 1 else echo "有空白行,空白行为 $C 行" exit 0 fi
#!/bin/bash
#
for i in $(cat /etc/passwd);do
if [ `cut -d: -f3 $i` = `cut -d: -f4 $i` ];then
echo "good guy"
exit 0
else
echo "bad guy"
exit 1
fi
done
#!/bin/bash a=`history | tr -s [:space:]|tail -1|awk '{print $1}'` if [ $a > 1000 ];then echo "some command will gone." else echo "OK" fi
#!/bin/bash if [ -f `ls /etc/inittab` ];then echo “普通文件” elif [ -d `ls /etc/inittab` ];then echo ”目录文件“ else echo "无法识别" fi
10、写一个脚本,能接受一个参数(文件路径),判断这个参数如果是一个存在的文件就显示“ok”,否则显示“No such file”
#!/bin/bash
read -p "请输入一个文件路径:" filename
if [ -e $filename ];then
echo "OK"
else
echo "No such file"
fi
#!/bin/bash if [ $# -lt 2 ]; then exit 8 fi echo "$[$1+$2]" echo "$[$1*$2]"
编写脚本,每天02:20 备份/etc/目录中所有文件,名称为当天日期;且保存文件为压缩文件;
crontab -e -- 20 2 * * * /root/xxx.sh vim xxx.sh #!/bin/bash # tar cJvf /var/`date +%F`.xz /etc/ chmod +x xxx.sh
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;
who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out
显示/proc/meminfo文件中大小s开头的行
grep -i "^s" /proc/meminfo
显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd
显示/etc/passwd文件中UID号最大的用户的用户名
sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1
如果用户root存在,显示其默认的shell程序
grep "^root\>" /etc/passwd &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7
找出/etc/passwd中的两位或三位数
grep "[0-9]\{2,3\}" /etc/passwd
显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行
grep "^[[:space:]]\+.*[^[:space:]]$" /etc/rc.d/rc.sysinit
找出”netstat -tan”命令的结果中,以“LISTEN”后跟0、1或多个空白字符结尾的行
netstat -tan | grep "LISTEN[[:space:]]*$"
添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行
useradd bash useradd testbash useradd basher useradd -s /sbin/nologin nologin grep "\(^[[:alnum:]]\+\>\).*\1$" /etc/passwd
输入一个设备文件,输出这个设备文件的基本信息;
read -t 5 -p "输入一个设备文件名:" devname [ -z $devname ] && fdisk -l && exit 1 if [ -b /dev/$devname ];then fdisk -l /dev/$devname exit 0 else echo "$devname 不是设备文件" echo "Usage:'请输入一个设备文件,如 sda'" fi
99乘法表:
for i in `seq 9`;do for j in `seq 9`;do [ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))`\t" done echo " " done
写一个for循环--遍历本网络网段中所有up的电脑
declare -i sum=0 for i in $(seq 1 100);do ping -c 1 -w 1 10.6.12.$i &> /dev/null if [ $? -eq 0 ];then let sum++ echo "10.6.12.$i 是通的" else echo "10.6.12.$i 是不通的" fi done echo "总共有 $sum 台电脑在线"
1到100的偶数和
declare -i sum=0 for i in $(seq 0 2 100);do let sum+=$i done echo “总数为:$sum”
判断 /var/log/ 的所有文件,以 .log 结尾的文件统计处理啊,并显示:
declare -i sum=0 for i in $(ls /var/log/);do if [ "*.log" = $i ];then echo $i let sum++ fi done echo ".log结尾的文件有:$sum"
通过位置变量创建linux系统账户及密码
useradd "$1" echo "$2" | passwd --stdin "$1"
每周5使用tar命令备份/var/log 下的所有日志文件,防止文件覆盖
tar czf /var/log/date +%F-%H`.bak.zip /var/log crontab -e * * * * 5 /root/tar.sh
实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根分区剩余空间小于1000M的时候发送报警邮件
disk_size=$(df / | awk '/\//{print $4}' ) mem_size=$(free | awk '/mem/{print $4}') while true;do if [ $disk_size -le 512000 -a $mem_size -le 1024000 ];then mail -s "Warning" root << EOF 资源不足 EOF fi done
脚本生成一个 100 以内的随机数值,提示用户猜数字,更具用户的输入,提示用户猜对了,猜打了或猜小了,直至用户猜对脚本结束。
num=$[RANDOM%100+1] echo "$num" while true;do read -p "计算机生成一个 1-100 的随机数,你猜:" cai fi [ $cai -eq $num ];then echo "猜对了" elif [ $cai -gt $num ];then echo "才打了" else echo "猜小了" fi done
检测本机当前用户是否为超级管理员,如果是管理员,使用 yum 安装 vsftpd,如果不是,则提示您非管理员,使用字串对比版本
if [ $USER == "root" ];then yum -y install vsftpd else echo "您不是管理员,没有权限" fi
斐波那契数列
fab(){ if [ $1 -eq 1 ];then echo 1 elif [ $1 -eq 2 ];then echo 1 else echo $[$(fab $[$1-1])+$(fab $[$1-2])] fi } fab 7
统计 /var/log/*.log 中 索引为偶数 的文件 的行数的 和;
a=(/var/log/*.log) for i in {0..7};do if [ $[$i%2] -eq 0 ];then line=`wc -l ${a[$i]} | cut -d' ' -f1` sum+=$line # sum+=`wc -l ${a[$i]} | cut -d' ' -f1` # sum+=$(wc -l ${a[$i]} | cut -d' ' -f1) fi done echo $sum
生成10个随机数,打印其中最大的数值
declare -a a declare -i max=0 for i in `seq 0 9`;do a[$i]=$RANDOM [ ${a[$i]} -gt $max ] && max=${a[$i]} done echo ${a[@]} echo "最大值为:$max"
判断/^r..ter/,/^user.*\>/之间的行的用户,是bash的用户,并显示用户的用户名,和UID
for i in `awk '/^r..ter/,/^user.*\>/{print $NF}' /etc/passwd`;do if [[ $i == "/bin/bash" ]];then echo `` fi done while line;do if [[ "/bin/bash" == `awk -F: '{print $NF}' $line` ]];then awk -F '{print $1,$3}' $line fi done << `sed -n '/^r..ter/,/^user.*\>/p' /etc/passwd`
监控某个固定网站的HTTP服务器的状态(测试返回码)
url=http://www.baidu.com check_http(){ status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url) } while true;do check_http date=$(date +%Y%m%d-%H:%M:%S) echo "当前时间为:$date" echo "$url 服务异常,状态码为${status_code}.请尽快排查异常" > /tmp/http$$.pid if [ $status_code -ne 200 ];then mail -s Warning root < /tmp/http$$.pid else echo "$rul连接正常" >> /var/log/http.log fi sleep 5 done
显示CPU厂商信息
awk '/vendor_id/{print $3}' /proc/cpuinfo
作者: 千纪
出处: https://www.cnblogs.com/diyudewudao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, https://www.cnblogs.com/diyudewudao/ 如有问题, 可邮件(diyudewudao@qq.com).
注:不要在意标题,在某些情况下名字都只是个代号不是。