https://blog.csdn.net/yugemengjing/article/details/82469785
1、编写hello world脚本
#!/bin/bash
echo “Hello World!”
2、通过位置变量创建 Linux 系统账户及密码
#!/bin/bash
#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数
useradd “$1”
echo “$2” | passwd ‐‐stdin “$1”
3、备份日志
#!/bin/bash
tar -czf log-date +%Y%m%d
.tar.gz /var/log
00 03 * * 5 /root/logbak.sh
4、一键部署 LNMP(RPM 包版本)
#!/bin/bash
yum ‐y install httpd
yum ‐y install mariadb mariadb‐devel mariadb‐server
yum ‐y install php php‐mysql
systemctl start httpd mariadb
systemctl enable httpd mariadb
5、监控内存和磁盘容量,小于给定值时报警
#!/bin/bash
disk_size=$(df / | awk ‘///{print $4}’)
mem_size=$(free | awk ‘/Mem/{print $4}’)
while :
do
if [ $disk_size -le 512000 -a $mem_size -le 1024000 ]
then
mail ‐s “Warning” root <
EOF
fi
done
6、猜数字游戏
#!/bin/bash
num= [ R A N D O M e c h o " [RANDOM%100+1] echo " [RANDOMecho"num"
while :
do
read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
if [ $cai -eq $num ]
then
echo “恭喜,猜对了”
exit
elif [ $cai -gt $num ]
then
echo “Oops,猜大了”
else
echo “Oops,猜小了”
fi
done
7、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)
#!/bin/bash
if [ $USER == “root” ]
then
yum ‐y install vsftpd
else
echo “您不是管理员,没有权限安装软件”
fi
8、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用 UID 数字对比版本)
#!/bin/bash
if [ $UID -eq 0 ];then
yum ‐y install vsftpd
else
echo “您不是管理员,没有权限安装软件”
fi
9、编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。
#!/bin/bash
read -p "请输入用户名: " user
#使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2
#没有输入用户名脚本退出后,使用$?查看的返回码为 2
if [ -z KaTeX parse error: Expected 'EOF', got '#' at position 45: …名" exit 2 fi #̲使用 stty ‐echo 关…{pass:‐123456}
useradd “ u s e r " e c h o " user" echo " user"echo"pass” | passwd ‐‐stdin “$user”
10、输入三个数并进行升序排序
#!/bin/bash
read -p “请输入一个整数:” num1
read -p “请输入一个整数:” num2
read -p “请输入一个整数:” num3
tmp=0
if [ $num1 -gt n u m 2 ] ; t h e n t m p = num2 ];then tmp= num2];thentmp=num1
num1= n u m 2 n u m 2 = num2 num2= num2num2=tmp
fi
if [ $num1 -gt n u m 3 ] ; t h e n t m p = num3 ];then tmp= num3];thentmp=num1
num1= n u m 3 n u m 3 = num3 num3= num3num3=tmp
fi
if [ $num2 -gt n u m 3 ] ; t h e n t m p = num3 ];then tmp= num3];thentmp=num2
num2= n u m 3 n u m 3 = num3 num3= num3num3=tmp
fi
echo “排序后数据(从小到大)为: n u m 1 , num1, num1,num2,$num3”
11、石头、剪刀、布游戏
#!/bin/bash
game=(石头 剪刀 布)
num= [ R A N D O M c o m p u t e r = [RANDOM%3] computer= [RANDOMcomputer={game[$num]}
echo “请根据下列提示选择您的出拳手势”
echo “1.石头”
echo “2.剪刀”
echo “3.布”
read -p “请选择 1‐3:” person
case $person in
1)
if [ $num -eq 0 ]
then
echo “平局”
elif [ $num -eq 1 ]
then
echo “你赢”
else
echo “计算机赢”
fi;;
2)
if [ $num -eq 0 ]
then
echo “计算机赢”
elif [ $num -eq 1 ]
then
echo “平局”
else
echo “你赢”
fi;;
3)
if [ $num -eq 0 ]
then
echo “你赢”
elif [ $num -eq 1 ]
then
echo “计算机赢”
else
echo “平局”
fi;;
*)
echo “必须输入 1‐3 的数字”
esac
12、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)
#!/bin/bash
for i in {1…254}
do
# 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i &>/dev/null
if [ ? − e q 0 ] ; t h e n e c h o " 192.168.4. ? -eq 0 ];then echo "192.168.4. ?−eq0];thenecho"192.168.4.i is up"
else
echo “192.168.4.$i is down”
fi
done
13、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(while 版本)
#!/bin/bash
i=1
while [ i − l e 254 ] d o p i n g ‐ c 2 ‐ i 0.3 ‐ W 1192.168.4. i -le 254 ] do ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4. i−le254]doping‐c2‐i0.3‐W1192.168.4.i &>/dev/null
if [ ? − e q 0 ] ; t h e n e c h o " 192.168.4. ? -eq 0 ];then echo "192.168.4. ?−eq0];thenecho"192.168.4.i is up"
else
echo “192.168.4.$i is down”
fi
let i++
done
14、编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(多进程版)
#!/bin/bash
#定义一个函数,ping 某一台主机,并检测主机的存活状态
myping(){
ping ‐c 2 ‐i 0.3 ‐W 1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo “$1 is up”
else
echo "KaTeX parse error: Expected 'EOF', got '}' at position 15: 1 is down" fi }̲ for i in {1..2…i &
done
15、编写脚本,显示进度条
#!/bin/bash
jindu(){
while :
do
echo -n ‘#’
sleep 0.2
done
}
jindu &
cp -a $1 $2
killall $0
echo “拷贝完成”
16、进度条,动态时针版本;定义一个显示进度的函数,屏幕快速显示| / ‐ \
#!/bin/bash
rotate_line(){
INTERVAL=0.5 #设置间隔时间
COUNT=“0” #设置4个形状的编号,默认编号为 0(不代表任何图像)
while :
do
COUNT=expr $COUNT + 1
#执行循环,COUNT 每次循环加 1,(分别代表4种不同的形状)
case $COUNT in #判断 COUNT 的值,值不一样显示的形状就不一样
“1”) #值为 1 显示‐
echo -e ‘‐’"\b\c"
sleep $INTERVAL
;;
“2”) #值为 2 显示\,第一个\是转义
echo -e ‘\’"\b\c"
sleep $INTERVAL
;;
“3”) #值为 3 显示|
echo -e “|\b\c”
sleep $INTERVAL
;;
“4”) #值为 4 显示/
echo -e “/\b\c”
sleep $INTERVAL
;;
) #值为其他时,将 COUNT 重置为 0
COUNT=“0”;;
esac
done
}
rotate_line
17、99 乘法表
#!/bin/bash
for i in seq 9
do
for j in seq $i
do
echo -n " j ∗ j* j∗i=$[i*j] "
done
echo
done
18、使用死循环实时显示 eth0 网卡发送的数据包流量
#!/bin/bash
while :
do
echo '本地网卡 eth0 流量信息如下: ’
ifconfig eth0 | grep “RX pack” | awk ‘{print $5}’
ifconfig eth0 | grep “TX pack” | awk ‘{print $5}’
sleep 1
done
19、使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
#!/bin/bash
for i in cat user.txt
do
useradd $i
echo “123456” | passwd ‐‐stdin $i
done
20、编写批量修改扩展名脚本
#!/bin/bash
for i in "ls .$1"
do
mv $i ${i%.}.$2
done
21、使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
#!/bin/bash
rm ‐rf ~/.ssh/known_hosts
expect <
expect “yes/no” {send “yes\r”}
expect “password” {send “密码\r”}
expect “#” {send “yum ‐y install httpd\r”}
expect “#” {send “exit\r”}
EOF
22、一键部署 LNMP(源码安装版本)
#!/bin/bash
menu()
{
clear
echo " ##############‐‐‐‐Menu‐‐‐‐##############"
echo “# 1. Install Nginx”
echo “# 2. Install MySQL”
echo “# 3. Install PHP”
echo “# 4. Exit Program”
echo " ########################################"
}
choice()
{
read -p “Please choice a menu[1‐9]:” select
}
install_nginx()
{
id nginx &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin nginx
fi
if [ -f nginx‐1.8.0.tar.gz ];then
tar -xf nginx‐1.8.0.tar.gz
cd nginx‐1.8.0
yum -y install gcc pcre‐devel openssl‐devel zlib‐devel make
./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd …
else
echo “没有 Nginx 源码包”
fi
}
install_mysql()
{
yum -y install gcc gcc‐c++ cmake ncurses‐devel perl
id mysql &>/dev/null
if [ $? -ne 0 ];then
useradd -s /sbin/nologin mysql
fi
if [ -f mysql‐5.6.25.tar.gz ];then
tar -xf mysql‐5.6.25.tar.gz
cd mysql‐5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/
‐‐basedir=/usr/local/mysql/
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
/bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf
echo “/usr/local/mysql/lib/” >> /etc/ld.so.conf
ldconfig
echo ‘PATH=$PATH:/usr/local/mysql/bin/’ >> /etc/profile
export PATH
else
echo “没有 mysql 源码包”
exit
fi
}
install_php()
{
#安装 php 时没有指定启动哪些模块功能,如果的用户可以根据实际情况自行添加额外功能如‐‐with‐gd 等
yum -y install gcc libxml2‐devel
if [ -f mhash‐0.9.9.9.tar.gz ];then
tar -xf mhash‐0.9.9.9.tar.gz
cd mhash‐0.9.9.9
./configure
make
make install
cd …
if [ ! ‐f /usr/lib/libmhash.so ];then
ln -s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
echo “没有 mhash 源码包文件”
exit
fi
if [ -f libmcrypt‐2.5.8.tar.gz ];then
tar -xf libmcrypt‐2.5.8.tar.gz
cd libmcrypt‐2.5.8
./configure
make
make install
cd …
if [ ! -f /usr/lib/libmcrypt.so ];then
ln -s /usr/local/lib/libmcrypt.so /usr/lib/
fi
ldconfig
else
echo “没有 libmcrypt 源码包文件”
exit
fi
if [ -f php‐5.4.24.tar.gz ];then
tar -xf php‐5.4.24.tar.gz
cd php‐5.4.24
./configure ‐‐prefix=/usr/local/php5 ‐‐with‐mysql=/usr/local/mysql ‐‐enable‐fpm ‐‐
enable‐mbstring ‐‐with‐mcrypt ‐‐with‐mhash ‐‐with‐config‐file‐path=/usr/local/php5/etc ‐‐with‐
mysqli=/usr/local/mysql/bin/mysql_config
make && make install
/bin/cp -f php.ini‐production /usr/local/php5/etc/php.ini
/bin/cp -f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf
cd …
else
echo “没有 php 源码包文件”
exit
fi
}
while :
do
menu
choice
case $select in
1)
install_nginx
;;
2)
install_mysql
;;
3)
install_php
;;
4)
exit
;;
*)
echo Sorry!
esac
done
23、编写脚本快速克隆 KVM 虚拟机
#!/bin/bash
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
read -p "Enter VM number: " VMNUM
if [ V M N U M − l e 9 ] ; t h e n V M N U M = 0 VMNUM -le 9 ];then VMNUM=0 VMNUM−le9];thenVMNUM=0VMNUM
fi
if [ -z “${VMNUM}” ]; then
echo “You must input a number.”
exit 65
elif [[ ${VMNUM} =~ [a‐z] ]; then
echo “You must input a number.”
exit 66
elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then
echo “Input out of range”
exit 67
fi
NEWVM=rh7_node${VMNUM}
if [ -e I M G D I R / IMG_DIR/ IMGDIR/{NEWVM}.img ]; then
echo “File exists.”
exit 68
fi
echo -en “Creating Virtual Machine disk image…\t”
qemu‐img create -f qcow2 ‐b I M G D I R / . IMG_DIR/. IMGDIR/.{BASEVM}.img I M G D I R / IMG_DIR/ IMGDIR/{NEWVM}.img &> /dev/null
echo -e “\e[32;1m[OK]\e[0m”
#virsh dumpxml B A S E V M > / t m p / m y v m . x m l c a t / v a r / l i b / l i b v i r t / i m a g e s / . r h e l 7. x m l > / t m p / m y v m . x m l s e d − i " / < n a m e > {BASEVM} > /tmp/myvm.xml cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml sed -i "/
sed -i “/uuid/s/.*/KaTeX parse error: Undefined control sequence: \/ at position 11: (uuidgen)<\̲/̲uuid>/" /tmp/my…{BASEVM}.img/s/ B A S E V M / {BASEVM}/ BASEVM/{NEWVM}/” /tmp/myvm.xml
sed -i “/mac /s/a1/0c/” /tmp/myvm.xml
echo -en “Defining new virtual machine…\t\t”
virsh define /tmp/myvm.xml &> /dev/null
echo -e “\e[32;1m[OK]\e[0m”
24、点名器脚本
#!/bin/bash
while :
do
#统计 user 文件中有多少用户
line=cat user.txt |wc ‐l
num= [ R A N D O M s e d − n " [RANDOM%line+1] sed -n " [RANDOMsed−n"{num}p" user.txt
sleep 0.2
clear
done
25、查看有多少远程的 IP 在连接本机
#!/bin/bash
netstat -atn | awk ‘{print $5}’ | awk ‘{print $1}’ | sort -nr | uniq -c
26、对 100 以内的所有正整数相加求和(1+2+3+4…+100)
#!/bin/bash
#seq 100 可以快速自动生成 100 个整数
sum=0
for i in seq 100
do
sum= [ s u m + i ] d o n e e c h o " 总 和 是 : [sum+i] done echo "总和是: [sum+i]doneecho"总和是:sum"
27、统计 13:30 到 14:30 所有访问 apache 服务器的请求有多少个
#!/bin/bash
awk -F “[ /:]” ‘$7":"$8>=“13:30” && $7":"$8<=“14:30”’ /var/log/httpd/access_log |wc -l
28、统计 13:30 到 14:30 所有访问本机 Aapche 服务器的远程 IP 地址是什么
#!/bin/bash
awk -F “[ /:]” ‘$7":"$8>=“13:30” && $7":"$8<=“14:30”{print $1}’ /var/log/httpd/access_log
29、打印国际象棋棋盘
#!/bin/bash
for i in {1…8}
do
for j in {1…8}
do
sum=$[i+j]
if [ $[sum%2] -eq 0 ];then
echo -ne “\033[46m \033[0m”
else
echo -ne “\033[47m \033[0m”
fi
done
echo
done
30、统计每个远程 IP 访问了本机 apache 几次?
#!/bin/bash
awk ‘{ip[$1]++}END{for(i in ip){print ip[i],i}}’ /var/log/httpd/access_log
31、统计当前 Linux 系统中可以登录计算机的账户有多少个
#!/bin/bash
#方法 1:
grep "bashKaTeX parse error: Expected 'EOF', got '#' at position 23: …passwd | wc -l #̲方法 2: awk -f: '…/{x++}end{print x}’ /etc/passwd
32、统计/var/log 有多少个文件,并显示这些文件名
#!/bin/bash
cd /var/log
sum=0
for i in ls -r *
do
if [ -f i ] ; t h e n l e t s u m + + e c h o " 文 件 名 : i ];then let sum++ echo "文件名: i];thenletsum++echo"文件名:i"
fi
done
echo “总文件数量为:$sum”
33、自动为其他脚本添加解释器信息
#!/bin/bash
if ! grep -q “^#!” $1; then
sed ‘1i #!/bin/bash’ $1
sed '2i #Description: ’
fi
vim +2 $1
34、自动化部署 varnish 源码包软件
#!/bin/bash
yum -y install gcc readline‐devel pcre‐devel
useradd -s /sbin/nologin varnish
tar -xf varnish‐3.0.6.tar.gz
cd varnish‐3.0.6
./configure ‐‐prefix=/usr/local/varnish
make && make install
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
cp redhat/varnish_reload_vcl /usr/bin/
ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln -s /usr/local/varnish/bin/* /usr/bin
mkdir /etc/varnish
cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/
uuidgen > /etc/varnish/secret
35、编写 nginx 启动脚本
#!/bin/bash
program=/usr/local/nginx/sbin/nginx
pid=/usr/local/nginx/logs/nginx.pid
start(){
if [ -f $pid ];then
echo “nginx 服务已经处于开启状态”
else
$program
fi
stop(){
if [ -! -f $pid ];then
echo “nginx 服务已经关闭”
else
$program -s stop
echo “关闭服务 ok”
fi
}
status(){
if [ -f $pid ];then
echo “服务正在运行…”
else
echo “服务已经关闭”
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
stop
sleep 1
start;;
status)
status;;
*)
echo “你输入的语法格式错误”
esac
36、自动对磁盘分区、格式化、挂载
#!/bin/bash
fdisk /dev/vdb << EOF
n
p
1
wq
EOF
#格式化刚刚创建好的分区
mkfs.xfs /dev/vdb1
#创建挂载点目录
if [ -e /data ]; then
exit
fi
mkdir /data
#自动挂载刚刚创建的分区,并设置开机自动挂载该分区
echo ‘/dev/vdb1 /data xfs defaults 1 2’ >> /etc/fstab
mount -a
37、自动优化 Linux 内核参数
#!/bin/bash
#脚本针对 RHEL7
cat >> /usr/lib/sysctl.d/00‐system.conf <
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
net.core.wmem_default=262144
net.core.wmem_max=262144
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
EOF
sysctl –p
38、切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
#mkdir /data/scripts
#vim /data/scripts/nginx_log.sh
#!/bin/bash
logs_path="/usr/local/nginx/logs/"
mv ${logs_path}access.log KaTeX parse error: Expected group after '_' at position 18: …ogs_path}access_̲(date -d “yesterday” +"%Y%m%d").log
kill -USR1 cat /usr/local/nginx/logs/nginx.pid
0 1 * * * /data/scripts/nginx_log.sh
39、检测 MySQL 数据库连接数量
#!/bin/bash
log_file=/var/log/mysql_count.log
user=root
passwd=123456
while :
do
sleep 2
count=mysqladmin -u "$user" -p "$passwd" status | awk '{print $4}'
echo "date +%Y‐%m‐%d
并发连接数为:$count" >> $log_file
done
40、根据 md5 校验码,检测文件是否被修改
#!/bin/bash
for i in ( l s / e t c / ∗ . c o n f ) d o m d 5 s u m " (ls /etc/*.conf) do md5sum " (ls/etc/∗.conf)domd5sum"i" >> /var/log/conf_file.log
done
41、检测 MySQL 服务是否存活
#!/bin/bash
host=192.168.51.198
user=root
passwd=123456
mysqladmin -h ‘ h o s t ′ − u ′ host' -u ' host′−u′user’ -p’$passwd’ ping &>/dev/null
if [ $? -eq 0 ]
then
echo “MySQL is UP”
else
echo “MySQL is down”
fi
42、备份 MySQL 的 shell 脚本(mysqldump版本)
#!/bin/bash
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup
mysqldump -u “ u s e r " − p " user" -p " user"−p"passwd” “ d b n a m e " > / m y s q l b a c k u p / " dbname" > /mysqlbackup/" dbname">/mysqlbackup/"dbname”-${date}.sql
43、将文件中所有的小写字母转换为大写字母
#!/bin/bash
tr “[a‐z]” “[A‐Z]” < $1
44、非交互自动生成 SSH 密钥文件
#!/bin/bash
rm -rf ~/.ssh/{known_hosts,id_rsa*}
ssh‐keygen -t RSA -N ‘’ -f ~/.ssh/id_rsa
45、检查特定的软件包是否已经安装
#!/bin/bash
if [ $# -eq 0 ];then
echo “你需要制定一个软件包名称作为脚本参数”
echo “用法:$0 软件包名称 …”
fi
for package in “$@”
do
if rpm -q KaTeX parse error: Expected 'EOF', got '&' at position 11: {package} &̲>/dev/null ;the…{package}\033[32m 已经安装\033[0m"
else
echo -e “${package}\033[34;1m 未安装\033[0m”
fi
done
46、监控 HTTP 服务器的状态(测试返回码)
#!/bin/bash
url=http://http://183.232.231.172/index.html
check_http()
{
status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
}
while :
do
check_http
date=$(date +%Y%m%d‐%H:%M:%S)
echo "当前时间为:$date
$url 服务器异常,状态码为${status_code}.
请尽快排查异常." > /tmp/http$$.pid
if [ $status_code -ne 200 ];then
mail -s Warning root < /tmp/http$$.pid
else
echo "$url 连接正常" >> /var/log/http.log
fi
sleep 5
done
47、自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
#!/bin/bash
service=“nfs http ssh”
port=“80 22 8080”
for i in $service
do
echo "Adding i s e r v i c e t o f i r e w a l l " f i r e w a l l ‐ c m d − − a d d − s e r v i c e = i service to firewall" firewall‐cmd --add-service= iservicetofirewall"firewall‐cmd−−add−service={i}
done
#循环将每个端口添加到防火墙规则中
for i in $port
do
echo "Adding i P o r t t o f i r e w a l l " f i r e w a l l ‐ c m d − − a d d − p o r t = i Port to firewall" firewall‐cmd --add-port= iPorttofirewall"firewall‐cmd−−add−port={i}/tcp
done
#将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
firewall‐cmd --runtime-to-permanent
48、使用脚本自动创建逻辑卷
#!/bin/bash
clear
echo -e “\033[32m !!!警告(Warning)!!!\033[0m”
echo
echo “+++++++++++++++++++++++++++++++++++++++++++++++++”
echo “脚本会将整个磁盘转换为 PV,并删除磁盘上所有数据!!!”
echo “This Script will destroy all data on the Disk”
echo “+++++++++++++++++++++++++++++++++++++++++++++++++”
echo
read -p “请问是否继续 y/n?:” sure
[ $sure != y ] && exit
read -p “请输入磁盘名称,如/dev/vdb:” disk
[ -z $disk ] && echo “没有输入磁盘名称” && exit
read -p “请输入卷组名称:” vg_name
[ -z $vg_name ] && echo “没有输入卷组名称” && exit
read -p “请输入逻辑卷名称:” lv_name
[ -z $lv_name ] && echo “没有输入逻辑卷名称” && exit
read -p “请输入逻辑卷大小:” lv_size
[ -z $lv_size ] && echo “没有输入逻辑卷大小” && exit
pvcreate $disk
vgcreate $vg_name $disk
lvcreate -L ${lv_size}M -n ${lv_name} ${vg_name}
49、显示 CPU 厂商信息
#!/bin/bash
awk ‘/vendor_id/{print $3}’ /proc/cpuinfo | uniq
50、删除某个目录下大小为 0 的文件
#!/bin/bash
#/var/www/html 为测试目录,脚本会清空该目录下所有 0 字节的文件
dir="/var/www/html"
find $dir -type f -size 0 -exec rm -rf {} ;
51、查找 Linux 系统中的僵尸进程
#!/bin/bash
ps aux | awk ‘{if($8 == “Z”){print $2,$11}}’
52、提示用户输入年份后判断该年是否为闰年
#!/bin/bash
read -p “请输入一个年份:” year
if [ “KaTeX parse error: Expected 'EOF', got '#' at position 49: …份" exit fi #̲使用正则测试变量 year 中…year” =~ [a‐Z] ]];then
echo “你输入的不是数字”
exit
fi
if [ $[year % 4] -eq 0 ] && [ [ y e a r e c h o " [year % 100] -ne 0 ];then echo " [yearecho"year年是闰年"
elif [ [ y e a r e c h o " [year % 400] -eq 0 ];then echo " [yearecho"year年是闰年"
else
echo “$year年不是闰年”
fi
53、生成随机密码(urandom 版本)
#!/bin/bash
tr -dc ‘_A‐Za‐z0‐9’ 54、生成随机密码(字串截取版本)
#!/bin/bash
key=“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
num=${#key}
pass=’’
for i in {1…8}
do
index= [ R A N D O M p a s s = [RANDOM%num] pass= [RANDOMpass=passKaTeX parse error: Expected '}', got 'EOF' at end of input: {key:index:1}
done
echo $pass
55、生成随机密码(UUID 版本,16 进制密码)
#!/bin/bash
uuidgen
56、生成随机密码(进程 ID 版本,数字密码)
#!/bin/bash
echo $$
57、测试用户名与密码是否正确
#!/bin/bash
#用户名为 tom 并且密码为 123456,则提示登录成功,否则提示登录失败
read -p “请输入用户名:” user
read -p “请输入密码:” pass
if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==′tom′−a"pass” == ‘123456’ ];then
echo “Login successful”
else
echo “Login Failed”
fi
58、循环测试用户名与密码是否正确
#!/bin/bash
for i in {1…3}
do
read -p “请输入用户名:” user
read -p “请输入密码:” pass
if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==′tom′−a"pass” == ‘123456’ ];then
echo “Login successful”
exit
fi
done
echo “Login Failed”
59、Shell 脚本的 fork 炸弹
#!/bin/bash
.() { .|.& };.
60、批量下载有序文件(pdf、图片、视频等等)
#!/bin/bash
url=“http://www.baidu.com/”
echo “开始下载…”
sleep 2
type=jpg
for i in seq 100
echo “正在下载 i . i. i.type”
curl u r l / url/ url/i. t y p e − o / t m p / type -o /tmp/ type−o/tmp/{i}$type
sleep 1
done
#curl 使用-o 选项指定下载文件另存到哪里.
61、显示当前计算机中所有账户的用户名称
#!/bin/bash
awk -F: ‘{print $1}’ /etc/passwd
cut -d: -f1 /etc/passwd
sed ‘s/:.*//’ /etc/passwd
62、制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data目录
#!/bin/bash
[ ! -d /data ] && mkdir /data
[ -z $1 ] && exit
if [ -d $1 ];then
tar -czf /data/$1.-date +%Y%m%d
.tar.gz $1
else
echo “该目录不存在”
fi
63、显示进度条(回旋镖版)
#!/bin/bash
while :
do
clear
for i in {1…20}
do
echo ‐e “\033[3;KaTeX parse error: Undefined control sequence: \0 at position 74: … do echo ‐e "\̲0̲33[3;{i}H*”
sleep 0.1
done
clear
done
64、安装 LAMP 环境(yum 版本)
#!/bin/bash
yum makecache &>/dev/null
num=$(yum repolist | awk ‘/repolist/{print $2}’ | sed ‘s/,//’)
if [ $num -lt 0 ];then
yum -y install httpd
yum -y install mariadb mariadb-server mariadb-devel
yum -y install php php-mysql
else
echo “未配置 yum 源…”
fi
65、循环关闭局域网中所有主机
#!/bin/bash
for i in {1…254}
do
[ KaTeX parse error: Expected 'EOF', got '&' at position 13: i -eq 100 ] &̲& continue ech…i…"
ssh 192.168.4.$i poweroff
done
66、获取本机 MAC 地址
#!/bin/bash
ip a s | awk ‘BEGIN{print " 本 机 MAC 地 址 信 息 如 下 :"}/1/{print $2;getline;if($0~/link/ether/){print $2}}’ | grep -v lo:
67、自动配置 rsynd 服务器的配置文件 rsyncd.conf
#!/bin/bash
[ ! -d /home/ftp ] && mkdir /home/ftp
echo ‘uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[ftp]
path = /home/ftp
comment = share’ > /etc/rsyncd.conf
68、修改 Linux 系统的最大打开文件数量
#!/bin/bash
cat >> /etc/security/limits.conf < #!/bin/bash Needs import readline and rlcompleter module import readline import rlcompleter help(rlcompleter) display detail: readline.parse_and_bind(‘tab: complete’) man python display detail: PYTHONSTARTUP variable if [ ! -f /usr/bin/tab.py ];then #!/bin/bash read -p “请输入分钟信息(00‐59):” min #!/bin/bash for i in {1…9} #!/bin/bash user= ( a w k − F : ′ / b a s h (awk -F: '/bash (awk−F:′/bash/{print $1}’ /etc/passwd) #!/bin/bash #每读取一行文件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++ #!/bin/bash running=0 for pid in /proc/[1‐9]* done #!/bin/bash #等级分类如下: read -p “请输入积分(0‐100):” JF #!/bin/bash read -p “请输入一个字符:” KEY #!/bin/bash for i in {1…100} #!/bin/bash list=(0 1) #!/bin/bash read -p “Are you sure?[y/n]:” sure #!/bin/bash ss -nutlp | awk ‘{print $1,$5}’ | awk -F"[: ]" ‘{print "协议:" 1 , " 端 口 号 : " 1,"端口号:" 1,"端口号:"NF}’ | grep “[0‐9]” | uniq #!/bin/bash user=$(awk -F: ‘$3>=1000{print $1}’ /etc/passwd) #!/bin/bash case $1 in #!/bin/bash cat << EOF #!/bin/bash clear if mount | grep -q “$mountpoint” ;then guestmount -r -d $name -i KaTeX parse error: Undefined control sequence: \0 at position 78: …‐‐‐‐" echo -e "\̲0̲33[32mname 虚拟机中网卡列表如下:\033[0m" #!/bin/bash read -p “请输入虚拟机名称:” name if grep -q “IPADDR” m o u n t p o i n t / e t c / s y s c o n f i g / n e t w o r k ‐ s c r i p t s / i f c f g ‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐dev ;then awk -F= -v x=$addr ‘$2==x{print “完成…”}’ m o u n t p o i n t / e t c / s y s c o n f i g / n e t w o r k ‐ s c r i p t s / i f c f g − mountpoint/etc/sysconfig/network‐scripts/ifcfg- mountpoint/etc/sysconfig/network‐scripts/ifcfg−dev #!/bin/bash read -p “请输入虚拟机名称:” name sed -i “/^root/s/x//” $mountpoint/etc/passwd #!/bin/bash trap ‘echo “暂停 10s”;sleep 10’ 2 #!/bin/bash wget http://www.memcached.org/files/memcached-1.5.1.tar.gz #!/bin/bash rpm --quiet -q tigervnc‐server #!/bin/bash sed -i ‘/^SELINUX/s/=.*/=disabled/’ /etc/selinux/config #!/bin/bash virt‐df #!/bin/bash clear #!/bin/bash tm=$(date +%H) #!/bin/bash i=0 #!/bin/bash if [ $# -eq 0 ] ;then #!/bin/bash echo “显示星期简称(如:Sun)” #!/bin/bash egrep “[0‐9a‐fA‐F]{2}(:[0‐9a‐fA‐F]{2}){5}” $1 #!/bin/bash awk ‘{print $1"\n"$2"\n"$3"\n"$4"\n"$5"\n"$6}’ 1.txt | sort | uniq -c | sort #!/bin/bash read -p “请输入存放证书的目录:” dir openssl genrsa -out d i r / {dir}/ dir/{name}.key openssl req -new -x509 -key d i r / {dir}/ dir/{name}.key -subj “/CN=common” -out d i r / {dir}/ dir/{name}.crt #!/bin/bash awk ‘{chars+=length($0)+1;words+=NF} END{print NR,words,chars}’ $1 0‐9 ↩︎
EOF
69、设置 Python 支持自动命令补齐功能设置 Python 支持自动命令补齐功能
Summary:Enable tab complete for python
Description:
cat >> /usr/bin/tab.py <
import rlcompleter
readline.parse_and_bind(‘tab: complete’)
EOF
fi
sed -i ‘$a export PYTHONSTARTUP=/usr/bin/tab.py’ /etc/profile
source /etc/profile
70、自动修改计划任务配置文件自动修改计划任务配置文件
read -p “请输入小时信息(00‐24):” hour
read -p “请输入日期信息(01‐31):” date
read -p “请输入月份信息(01‐12):” month
read -p “请输入星期信息(00‐06):” weak
read -p “请输入计划任务需要执行的命令或脚本:” program
echo “$min $hour $date $month $weak $program” >> /etc/crontab
71、使用脚本循环创建三位数字的文本文件(111-999 的文件)使用脚本循环创建三位数字的文本文件(111-999 的文件)
do
for j in {1…9}
do
for k in {1…9}
do
touch /tmp/ i i ij$k.txt
done
done
done
72、找出/etc/passwd 中能登录的用户,并将对应在/etc/shadow 中第二列密码提出处理找出/etc/passwd 中能登录的用户,并将对应在/etc/shadow 中第二列密码提出处理
for i in u s e r d o a w k − F : − v x = user do awk -F: -v x= userdoawk−F:−vx=i ‘$1==x{print $1,$2}’ /etc/shadow
done
73、统计/etc/passwd 中 root 出现的次数统计/etc/passwd 中 root 出现的次数
awk -F: ‘{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print "root 出现次数为"x}’ /etc/passwd
74、统计 Linux 进程相关数量信息统计 Linux 进程相关数量信息
sleeping=0
stoped=0
zombie=0在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程 PID
每个 PID 编号的目录下记录有该进程相关的信息
do
procs= [ p r o c s + 1 ] s t a t = [procs+1] stat= [procs+1]stat=(awk ‘{print $3}’ $pid/stat)每个 pid 目录下都有一个 stat 文件,该文件的第 3 列是该进程的状态信息
case $stat in
R)
running=$[running+1]
;;
T)
stoped=$[stoped+1]
;;
S)
sleeping=$[sleeping+1]
;;
Z)
zombie=$[zombie+1]
;;
esac
echo “进程统计信息如下”
echo “总进程数量为: p r o c s " e c h o " R u n n i n g 进 程 数 为 : procs" echo "Running 进程数为: procs"echo"Running进程数为:running”
echo “Stoped 进程数为: s t o p e d " e c h o " S l e e p i n g 进 程 数 为 : stoped" echo "Sleeping 进程数为: stoped"echo"Sleeping进程数为:sleeping”
echo “Zombie 进程数为:$zombie”
75、从键盘读取一个论坛积分,判断论坛用户等级从键盘读取一个论坛积分,判断论坛用户等级
大于等于 90 神功绝世
大于等于 80,小于 90 登峰造极
大于等于 70,小于 80 炉火纯青
大于等于 60,小于 70 略有小成
小于 60 初学乍练
if [ J F − g e 90 ] ; t h e n e c h o " JF -ge 90 ] ; then echo " JF−ge90];thenecho"JF 分,神功绝世"
elif [ J F − g e 80 ] ; t h e n e c h o " JF -ge 80 ] ; then echo " JF−ge80];thenecho"JF 分,登峰造极"
elif [ J F − g e 70 ] ; t h e n e c h o " JF -ge 70 ] ; then echo " JF−ge70];thenecho"JF 分,炉火纯青"
elif [ J F − l t 60 ] ; t h e n e c h o " JF -lt 60 ] ; then echo " JF−lt60];thenecho"JF 分,略有小成"
else
echo “$JF 分,初学乍练”
fi
76、判断用户输入的数据类型(字母、数字或其他)判断用户输入的数据类型(字母、数字或其他)
case “$KEY” in
[a‐z]|[A‐Z])
echo “字母”
;;
[0‐9])
echo “数字”
;;
*)
echo “空格、功能键或其他控制字符”
esac
77、显示进度条(数字版)显示进度条(数字版)
echo 使用‐e 选项后,在打印参数中可以指定 H,设置需要打印内容的 x,y 轴的定位坐标
设置需要打印内容在第几行,第几列
do
echo -e “\033[6;8H[”
echo -e “\033[6;9H$i%”
echo -e “\033[6;13H]”
sleep 0.1
done
78、打印斐波那契数列打印斐波那契数列(该数列的特点是后一个数字,永远都是前 2 个数字之和)
斐波那契数列后一个数字永远是前 2 个数字之和
如:0 1 1 2 3 5 8 13 … …
for i in seq 2 11
do
list[$i]=expr ${list[‐1]} + ${list[‐2]}
done
echo ${list[@]}
79、判断用户输入的是 Yes 或 NO判断用户输入的是 Yes 或 NO
case $sure in
y|Y|Yes|YES)
echo “you enter $a”
;;
n|N|NO|no)
echo “you enter $a”
;;
*)
echo “error”;;
esac
80、显示本机 Linux 系统上所有开放的端口列表显示本机 Linux 系统上所有开放的端口列表
从端口列表中观测有没有没用的端口,有的话可以将该端口对应的服务关闭,防止意外的攻击可能性
81、将 Linux 系统中 UID 大于等于 1000 的普通用户都删除将 Linux 系统中 UID 大于等于 1000 的普通用户都删除
先用 awk 提取所有 uid 大于等于 1000 的普通用户名称
再使用 for 循环逐个将每个用户删除即可
for i in $user
do
userdel -r $i
done
82、使用脚本开启关闭虚拟机使用脚本开启关闭虚拟机
脚本通过调用virsh命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包
$1是脚本的第1个参数,$2是脚本的第2个参数
第1个参数是你希望对虚拟机进行的操作指令,第2个参数是虚拟机名称
list)
virsh list --all
;;
start)
virsh start $2
;;
stop)
virsh destroy $2
;;
enable)
virsh autostart $2
;;
disable)
virsh autostart --disable $2
;;
*)
echo “Usage:$0 list”
echo “Usage:$0 [start|stop|enable|disable] VM_name”
cat << EOF
#list 显示虚拟机列表
#start 启动虚拟机
#stop 关闭虚拟机
#enable 设置虚拟机为开机自启
#disable 关闭虚拟机开机自启功能
EOF
;;
esac
83、调整虚拟机内存参数的 shell 脚本调整虚拟机内存参数的 shell 脚本
脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包
1.调整虚拟机最大内存数值
2.调整实际分配给虚拟机的内存数值
EOF
read -p “请选择[1‐2]:” select
case $select in
1)
read -p “请输入虚拟机名称” name
read -p “请输入最大内存数值(单位:k):” size
virsh setmaxmem $name --size $size --config
;;
2)
read -p “请输入虚拟机名称” name
read -p “请输入实际分配内存数值(单位:k):” size
virsh setmem $name $size
;;
*)
echo “Error”
;;
esac
84、查看 KVM 虚拟机中的网卡信息(不需要进入启动或进入虚拟机)查看 KVM 虚拟机中的网卡信息(不需要进入启动或进入虚拟机)
该脚本使用 guestmount 工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中
Centos7.2 中安装 libguestfs‐tools‐c 可以获得 guestmount 工具
虚拟机可以启动或者不启动都不影响该脚本的使用
将虚拟机磁盘文件挂载到文件系统后,就可以直接读取磁盘文件中的网卡配置文件中的数据
mountpoint="/media/virtimage"
[ ! -d $mountpoint ] && mkdir $mountpoint
read -p “输入虚拟机名称:” name
echo “请稍后…”如果有设备挂载到该挂载点,则先 umount 卸载
umount $mountpoint
fi只读的方式,将虚拟机的磁盘文件挂载到特定的目录下,这里是/media/virtimage 目录
dev=$(ls /media/virtimage/etc/sysconfig/network‐scripts/ifcfg-* |awk -F"[/‐]" ‘{print $9}’)
echo $dev
echo “‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐”
echo
echo
echo “+++++++++++++++++++++++++++++++++++++++++++”
echo -e “\033[32m 网卡 IP 地址信息如下:\033[0m”
for i in d e v d o e c h o − n " dev do echo -n " devdoecho−n"i:"
grep -q “IPADDR” /media/virtimage/etc/sysconfig/network‐scripts/ifcfg-$i || echo “未配置 IP地址”
awk -F= '/IPADDR/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲' /media/virtim…i
done
echo “+++++++++++++++++++++++++++++++++++++++++++”
85、不登陆虚拟机,修改虚拟机网卡 IP 地址不登陆虚拟机,修改虚拟机网卡 IP 地址
该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs‐tools‐c 可以获得 guestmount 工具
脚本在不登陆虚拟机的情况下,修改虚拟机的 IP 地址信息
在某些环境下,虚拟机没有 IP 或 IP 地址与真实主机不在一个网段
真实主机在没有 virt‐manger 图形的情况下,远程连接虚拟机很麻烦
该脚本可以解决类似的问题
if virsh domstate $name | grep -q running ;then
echo “修改虚拟机网卡数据,需要关闭虚拟机”
virsh destroy $name
fi
mountpoint="/media/virtimage"
[ ! -d $mountpoint ] && mkdir m o u n t p o i n t e c h o " 请 稍 后 . . . " i f m o u n t ∣ g r e p − q " mountpoint echo "请稍后..." if mount | grep -q " mountpointecho"请稍后..."ifmount∣grep−q"mountpoint" ;then
umount $mountpoint
fi
guestmount -d $name -i $mountpoint
read -p “请输入需要修改的网卡名称:” dev
read -p “请输入 IP 地址:” addr判断原本网卡配置文件中是否有 IP 地址,有就修改该 IP,没有就添加一个新的 IP 地址
sed -i “/IPADDR/s/=.*/=$addr/” m o u n t p o i n t / e t c / s y s c o n f i g / n e t w o r k ‐ s c r i p t s / i f c f g ‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐dev
else
echo “IPADDR=$addr” >> m o u n t p o i n t / e t c / s y s c o n f i g / n e t w o r k ‐ s c r i p t s / i f c f g ‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐ mountpoint/etc/sysconfig/network‐scripts/ifcfg‐dev
fi如果网卡配置文件中有客户配置的 IP 地址,则脚本提示修改 IP 完成
86、破解虚拟机密码,无密码登陆虚拟机系统破解虚拟机密码,无密码登陆虚拟机系统
该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs‐tools‐c 可以获得 guestmount 工具
if virsh domstate $name | grep -q running ;then
echo “破解,需要关闭虚拟机”
virsh destroy $name
fi
mountpoint="/media/virtimage"
[ ! -d $mountpoint ] && mkdir m o u n t p o i n t e c h o " 请 稍 后 . . . " i f m o u n t ∣ g r e p − q " mountpoint echo "请稍后..." if mount | grep -q " mountpointecho"请稍后..."ifmount∣grep−q"mountpoint" ;then
umount $mountpoint
fi
guestmount -d $name -i $mountpoint将 passwd 中密码占位符号 x 删除,该账户即可实现无密码登陆系统
87、Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本
使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号
使用 kill ‐l 可以查看 Linux 系统中所有的信号列表,其中 2 代表 Ctrl+C
trap 当发现有用户 ctrl+C 希望终端脚本时,就执行 echo “暂停 10s”;sleep 10 这两条命令
另外用户使用命令:[ kill ‐2 脚本的 PID ] 也可以中断脚本和 Ctrl+C 一样的效果,都会被 trap 拦截
while :
do
echo “go go go”
done
88、一键部署 memcached一键部署 memcached
脚本用源码来安装 memcached 服务器
注意:如果软件的下载链接过期了,请更新 memcached 的下载链接
yum -y install gcc
tar -xf memcached‐1.5.1.tar.gz
cd memcached‐1.5.1
./configure
make
make install
89、一键配置 VNC 远程桌面服务器(无密码版本)一键配置 VNC 远程桌面服务器(无密码版本)
脚本配置的 VNC 服务器,客户端无需密码即可连接
客户端仅有查看远程桌面的权限,没有鼠标和键盘的操作权限
if [ $? -ne 0 ];then
yum -y tigervnc‐server
fi
x0vncserver AcceptKeyEvents=0 AlwaysShared=1
AcceptPointerEvents=0 SecurityTypes=None rfbport=5908
90、关闭 SELinux关闭 SELinux
setenforce 0
91、查看所有虚拟机磁盘使用量以及CPU使用量信息查看所有虚拟机磁盘使用量以及CPU使用量信息
read -n1 “按任意键继续” key
virt‐top
92、使用 shell 脚本打印图形使用 shell 脚本打印如下图形:
打印第一组图片
for(())为类 C 语言的语法格式,也可以使用 for i in;do ;done 的格式替换
for((i=1;i<=9;i++))循环会执行 9 次,i 从 1 开始到 9,每循环一次 i 自加 1
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
echo -n “$i”
done
echo “”
done
read -n1 “按任意键继续” key
#打印第二组图片
clear
for (( i=1; i<=5; i++ ))
do
for (( j=1; j<=i; j++ ))
do
echo -n " |"
done
echo “_ "
done
read -n1 “按任意键继续” key
#打印第三组图片
clear
for (( i=1; i<=5; i++ ))
do
for (( j=1; j<=i; j++ ))
do
echo -n " *”
done
echo “”
done
for (( i=5; i>=1; i‐‐ ))
do
for (( j=1; j<=i; j++ ))
do
echo -n " *"
done
echo “”
done
93、根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动根据计算机当前时间,返回问候语,可以将该脚本设置为开机启动
00‐12 点为早晨,12‐18 点为下午,18‐24 点为晚上
使用 date 命令获取时间后,if 判断时间的区间,确定问候语内容
if [ $tm -le 12 ];then
msg=“Good Morning $USER”
elif [ $tm -gt 12 -a $tm -le 18 ];then
msg=“Good Afternoon $USER”
else
msg=“Good Night U S E R " f i e c h o " 当 前 时 间 是 : USER" fi echo "当前时间是: USER"fiecho"当前时间是:(date +”%Y‐%m‐%d %H:%M:%S")"
echo -e “\033[34m$msg\033[0m”
94、读取用户输入的账户名称,将账户名写入到数组保存读取用户输入的账户名称,将账户名写入到数组保存
定义数组名称为 name,数组的下标为 i,小标从 0 开始,每输入一个账户名,下标加 1,继续存下一个账户
最后,输入 over,脚本输出总结性信息后脚本退出
while :
do
read -p “请输入账户名,输入 over 结束:” key
if [ k e y = = " o v e r " ] ; t h e n b r e a k e l s e n a m e [ key == "over" ];then break else name[ key=="over"];thenbreakelsename[i]= k e y l e t i + + f i d o n e e c h o " 总 账 户 名 数 量 : key let i++ fi done echo "总账户名数量: keyleti++fidoneecho"总账户名数量:{#name[*]}"
echo “${name[@]}”
95、判断文件或目录是否存在判断文件或目录是否存在
echo “未输入任何参数,请输入参数”
echo “用法:$0 [文件名|目录名]”
fi
if [ -f $1 ];then
echo “该文件,存在”
ls -l $1
else
echo “没有该文件”
fi
if [ -d $1 ];then
echo “该目录,存在”
ls -ld $2
else
echo “没有该目录”
fi
96、打印各种格式的时间打印各种时间格式
date +%a
echo “显示星期全称(如:Sunday)”
date +%A
echo “显示月份简称(如:Jan)”
date +%b
echo “显示月份全称(如:January)”
date +%B
echo “显示数字月份(如:12)”
date +%m
echo “显示数字日期(如:01 号)”
date +%d
echo “显示数字年(如:01 号)”
date +%Y echo “显示年‐月‐日”
date +%F
echo “显示小时(24 小时制)”
date +%H
echo “显示分钟(00…59)”
date +%M
echo “显示秒”
date +%S
echo “显示纳秒”
date +%N
echo “组合显示”
date +"%Y%m%d %H:%M:%S"
97、使用 egrep 过滤 MAC 地址使用 egrep 过滤 MAC 地址
MAC 地址由 16 进制组成,如 AA:BB:CC:DD:EE:FF
[0‐9a‐fA‐F]{2}表示一段十六进制数值,{5}表示连续出现5组前置:的十六进制
98、统计双色球各个数字的中奖概率统计双色球各个数字的中奖概率
往期双色球中奖号码如下:
01 04 11 28 31 32 16
04 07 08 18 23 24 02
02 05 06 16 28 29 04
04 19 22 27 30 33 01
05 10 18 19 30 31 03
02 06 11 12 19 29 06
统计篮球和红球数据出现的概率次数(篮球不分顺序,统计所有篮球混合在一起的概率)
awk ‘{print $7}’ 1.txt | sort | uniq -c | sort
99、生成签名私钥和证书生成签名私钥和证书
if [ ! -d $dir ];then
echo “该目录不存在”
exit
fi
read -p “请输入密钥名称:” name使用 openssl 生成私钥
使用 openssl 生成证书 #subj 选项可以在生成证书时,非交互自动填写 Common Name 信息
100、使用awk编写的wc程序使用awk编写的wc程序
自定义变量 chars 变量存储字符个数,自定义变量 words 变量存储单词个数
awk 内置变量 NR 存储行数
length()为 awk 内置函数,用来统计每行的字符数量,因为每行都会有一个隐藏的$,所以每次统计后都+1
wc 程序会把文件结尾符$也统计在内,可以使用 cat ‐A 文件名,查看该隐藏字符
注:本篇文章是根据王森的博客整理而来,仅供学习参考!
————————————————
版权声明:本文为CSDN博主「baiduoWang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yugemengjing/article/details/82469785