1、编写hello world脚本
#!/bin/bash echo "hello world"
2、通过位置变量创建linux系统账户和密码
#!/bin/bash #$1是执行脚本第一个参数 $2是执行脚本第二个参数 useradd "$1" echo "$2" | passwd --stdin "$1" #测试脚本 [root@template-host sh1]# sh 2.sh aaa 123 Changing password for user aaa. passwd: all authentication tokens updated successfully. #测试登录 [root@template-host sh1]# su - aaa [aaa@template-host ~]$
3、每周五使用tar命令备份 /var/log下的所有日志文件
#!/bin/bash tar -czPf log-`date +%y%m%d`.tar.gz /var/log #加P是因为如果不加会出现错误:tar: Removing leading `/' from member names date和+之间注意有空格。
修改系统参数
[root@template-host sh1]# crontab -e
00 03 * * 5 /data/sh1/3.sh
4、一键部署LNMP(RPM包版本)
#!/bin/bash #此脚本需要提前配置yum源,否则无法配置成功。本脚本使用于7.4 yum -y install httpd yum -y install mariadb mariadb-devel mariadb-server yum -y install php php-mysql systemctl start httpd mariadb #启动httpd、mariadb systemctl enable httpd mariadb #加入开机自启动 systemctl status httpd mariadb #查看是否成功
5、实时监控本机硬盘内存剩余空间,剩余内存空间小于500M,根分区剩余空间小于1000M时,发送警报信息到命令行
#!bin/bash #提取分区剩余空间 单位:kb disk_size=$(df / | awk '///{print $4}') #提取内存空间 单位M mem_size=$(free -m | awk '/Mem/{print $4}') while : do if [ $disk_size -le 512000 -o $mem_size -le 1024 ];then echo "警报:资源不足" sleep 5 fi done
6、随机生成一个100以内的随机数,提示用户猜数字,提示用户猜大了、猜小了、猜对了,直至用户猜对,脚本结束。
#!bin/bash #RANDOM为系统自带的系统变量,值为0-32767的随机数 #使用取余算法将随机数变为1-100的随机数 end=100 out=101 num=$[random%100+1] while : do read -p "请输入1-100随机数:" input if [ $input -ge $out ];then echo "范围错误,拜拜!!!" exit elif [ $input -eq $num ];then echo "恭喜你,猜对了" exit elif [ $input -gt $num ];then echo "猜大了" elif [ $input -lt $num ];then echo "猜小了" fi done echo "随机数为:"$num
7、检测当前账户是否为超级管理员,如果是管理员,则使用yum安装vsftpd,如果不是,则提示您非管理员(使用字串对比版本、UID版本两个版本)
#!bin/bash
#字串对比版本 if [ $USER == "root" ];then yum install vsftpd else echo "您不是管理员,没有权限安装软件" fi
#!bin/bash
#UID对比版本 if [ $UID -eq 0 ];then yum install vsftpd else echo "您不是管理员,没有权限安装软件" fi
8、提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入用户名,则提示必须输入用户名并推出脚本;如果用户不输入密码,则使用统一的mim123456作为默认密码
1 #!bin/bash 2 read -p "请输入用户名:" user 3 if [ -z $user ];then 4 echo "您未输入用户名" 5 exit 6 fi 7 #使用stty -echo关闭shell的回显功能 8 #使用stty echo打开shell的回显功能 9 stty echo 10 read -p "请输入密码:" pass 11 stty -echo 12 pass=${pass:-123456} 13 useradd "$user" 14 echo "$pass" | passwd --stdin "$user"
9、以此提示用户输入3个整数,脚本根据数据大小依次排序输出三个数字
1 #!bin/bash 2 read -p "请输入一个整数:" num1 3 read -p "请输入一个整数:" num2 4 read -p "请输入一个整数:" num3 5 #不管谁大谁下,最后都打印num1、num2、num3 6 #num1永远存最小的值,num2存中间值、num3存最大值 7 tmp=0 8 #如果num1大于num2,则对调num1和num2的值,确保num1中是最小的值 9 if [ $num1 -gt $num2 ];then 10 tmp=$num1 11 num1=$num2 12 num2=$tmp 13 fi 14 if [ $num2 -gt $num3 ];then 15 tmp=$num2 16 num2=$num3 17 num3=$tmp 18 fi 19 echo "从小到大的顺序为:"$num1,$num2,$num3
10、编写脚本,实现(石头、剪刀、布)游戏。
#!bin/bash 2 game=(石头 剪刀 布) 3 num=$[RANDOM%3] 4 computer=${game[$num]} 5 #通过随机数获取计算机的出拳,出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别为三种不 通的可能 6 echo "请根据下列提示出拳:" 7 echo "1.石头" 8 echo "2.剪刀" 9 echo "3.布" 10 read -p "请输入1-3:" person 11 case $person in 12 1) 13 if [ $num -eq 0 ];then 14 echo "平局" 15 elif [ $num -eq 1 ];then 16 echo "你赢了" 17 else 18 echo "计算机赢" 19 fi;; 20 2) 21 if [ $num -eq 0 ];then 22 echo "计算机赢" 23 elif [ $num -eq 1 ];then 24 echo "平局" 25 else 26 echo "你赢了" 27 fi;; 28 3) 29 if [ $num -eq 0 ];then 30 echo "你赢了" 31 elif [ $num -eq 1 ];then 32 echo "计算机赢" 33 else 34 echo "平局" 35 fi;; 36 *) 37 echo "必须输入1-3的数字" 38 esac
11、编写脚本测试172.16.1.0/24整个网段中那些主机处于开机状态,那些主机处于关机状态(for版本、while版本、多进程版本)
1 #!bin/bash 2 #for i in {1..254} 3 #do 4 # ping -c2 -i0.3 -W1 172.16.1.$i &>/dev/null 5 # if [ $? -eq 0 ];then 6 # echo "172.16.1.$i" is up 7 # else 8 # echo "172.16.1.$i" is down 9 # fi 10 #done 11 12 #!bin/bash 13 #i=1 14 #while [ $i -le 254 ] 15 #do 16 # ping -c2 -i0.3 -W1 172.16.1.$i &>/dev/null 17 # if [ $? -eq 0 ];then 18 # echo "172.16.1.$i" is up 19 # else 20 # echo "172.16.1.$i" is down 21 # fi 22 # let i++ 23 #done 24 25 #!bin/bash 26 #定义一个函数,ping某一台主机,并检测主机的存活状态 27 myping(){ 28 ping -c2 -i0.3 -W1 $1 &>/dev/null 29 if [ $? -eq 0 ];then 30 echo "$1" is up 31 else 32 echo "$1" is down 33 fi 34 } 35 for i in {1..254} 36 do 37 myping 172.16.1.$i & 38 done 39 #使用&符号,将执行的函数放在后台执行,这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,以此类推。
12、编写脚本,显示进度条
1 #!bin/bash 2 jindu(){ 3 while : 4 do 5 echo -n "#" 6 sleep 0.1 7 done 8 } 9 jindu & 10 cp -r $1 $2 11 kill $! 12 echo "拷贝完成"
13、9*9乘法表
1 #!bin/bash 2 for i in `seq 9` 3 do 4 for j in `seq $i` 5 do 6 echo -n "$i*$j=$[i*j] " 7 done 8 echo 9 done
14、使用死循环实时显示eth0网卡发送的数据包的流量
1 #!bin/bash 2 while : 3 do 4 echo "本地网卡eth0流量信息如下:" 5 ifconfig eth0 | grep "RX pack" | awk '{print $5}' 6 ifconfig eth0 | grep "TX pack" | awk '{print $5}' 7 sleep 1 8 done
15、使用user.txt名单,在计算机中自动创建对应的账户并设置初始密码
1 #!bin/bash 2 for i in `cat user.txt` 3 do 4 useradd $i 5 echo "123456" | passwd --stdin $i 6 done
16、一键部署LNMP(源码安装版本)
17、查看有多少个远程ip在远程本机
#!/bin/bash #使用netstat -atn 可以查看本机所有连接的状态,-a查看所有,-t 仅显示tcp连接的信息,-n数字格式显示 #Local Address (第四列是本机的IP和端口信息) #Foreign Address(第五列是远程主机的IP和端口信息) #使用awk命令仅显示第5列数据,再显示第1列IP地址的信息 #sort可以按数字大小排序,最后使用uniq将多余重复的删除并统计重复的次数 #-F 文件中的Foreign Address是以:作为分隔的 netstat -atn | awk '{print $5}' | awk -F: '{print $1}' | sort -nr | uniq -c
18、对100以内的所有正整数相加求和(1-00)
1 #!bin/bash 2 tmp=0 3 for i in `seq 100` 4 do 5 tmp=$[i+tmp] 6 done 7 echo "总和是:$tmp"
19、打印国际象棋棋盘
1 #!bin/bash 2 #设置两个变量,i和j,一个代表行,一个代表列,国际象棋为8*8棋盘 3 4 #i=1是代表打印第一行棋盘,第一行棋盘有灰色和蓝色间隔输出,总共为8列 5 6 #i=1,j=1代表第一行第一列;i=2,j=3代表第二行第三列 7 8 #棋盘的规律是i+j如果是偶数,就打印蓝色色块,如果是奇数就打印灰色色块 9 10 #使用echo -ne打印色块,并且打印完成色块后不自动换行,在同一行继续输出其他色块 11 for i in {1..8} 12 do 13 for j in {1..8} 14 do 15 sum=$[i+j] 16 if [ $[sum%2] -eq 0 ];then 17 echo -ne "