shell 练习附带参考答案,建以先看前面一条没有答案的练习,做完再参考_#! bin bash 通过位置变量创建 linux 系统账户及密码 #$1 是执行脚本的第一个参数(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

ping ‐c2 ‐i0.3 ‐W1 192.168.4.$i  &>/dev/null

if  [ $? –eq 0 ];then

echo “192.168.4.$i is up”

else

echo  “192.168.4.$i is down”

fi

let i++

done

  1. 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机

状态(多进程版)

#!/bin/bash

#Author:丁丁历险(Jacob)

#定义一个函数,ping 某一台主机,并检测主机的存活状态

myping(){

ping ‐c2 ‐i0.3 ‐W1 $1  &>/dev/null

if  [ $? ‐eq 0 ];then

echo “$1 is up”

else

echo    “$1 is down”

fi

}

for  i  in   {1…254}

do

myping 192.168.4.$i &

done

#使用&符号,将执行的函数放入后台执行

#这样做的好处是不需要等待 ping 第一台主机的回应,就可以继续并发 ping 第二台主机,依次类推。

  1. 编写脚本,显示进度条

#!/bin/bash

jindu(){

while :

do

echo  ‐n  ‘#’

sleep 0.2

done

}

jindu &

cp  ‐a  $1  $2

killall  $!

echo  "拷贝完成’’

  1. 进度条,动态时针版本

#!/bin/bash

#定义一个显示进度的函数,屏幕快速显示|  / ‐ \

rotate_line(){

INTERVAL=0.1                 #设置间隔时间

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

  1. 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)

#!/bin/bash

7 / 38

交流 QQ:86198501     http://bj.linux.tedu.cn/

交流 QQ:86198501     达内Linux 云计算学院

for  i  in  seq 9

do

for  j   in  seq $i

do

echo ‐n  "KaTeX parse error: Undefined control sequence: \* at position 2: i\̲*̲j=$[i*j]  "

done

echo

done

  1. 使用死循环实时显示 eth0 网卡发送的数据包流量

#!/bin/bash

#Author:丁丁历险(Jacob)

while :

do

echo  '本地网卡 eth0 流量信息如下: ’

ifconfig  eth0   |  grep “RX pack”  | awk  ‘{print $5}’

ifconfig  eth0   |  grep “TX pack”  | awk  ‘{print $5}’

sleep 1

done

  1. 使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码

#!/bin/bash

#本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息

for  i  in  cat  user.txt

do

useradd  $i

echo “123456” | passwd ‐‐stdin $i

done

  1. 编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件

#!/bin/bash

#执行脚本时,需要给脚本添加位置参数

#脚本名  txt   doc(可以将 txt 的扩展名修改为 doc)

#脚本名  doc  jpg(可以将 doc 的扩展名修改为 jpg)

for  i   in   “ls *.$1”

do

mv  $i    ${i%.*}.$2

done

  1. 使用 expect 工具自动交互密码远程其他主机安装 httpd 软件

#!/bin/bash

#Author:丁丁历险(Jacob)

#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机

rm  ‐rf  ~/.ssh/known_hosts

expect  <<EOF

spawn  ssh   192.168.4.254

expect  “yes/no”       {send  “yes\r”}

#根据自己的实际情况将密码修改为真实的密码字串

expect  “password”    {send  “密码\r”}

expect  “#”            {send  “yum ‐y install httpd\r”}

expect  “#”            {send  “exit\r”}

EOF

  1. 一键部署 LNMP(源码安装版本)

#!/bin/bash

#Author:丁丁历险(Jacob)

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

install_nginx

;;

install_mysql

;;

install_php

;;

exit

;;

*)

echo Sorry!

esac

done

  1. 编写脚本快速克隆 KVM 虚拟机

#!/bin/bash

#Author:丁丁历险(Jacob)

#本脚本针对 RHEL7.2 或 Centos7.2

#本脚本需要提前准备一个 qcow2 格式的虚拟机模板,名称为/var/lib/libvirt/images  /.rh7_template 的虚

拟机模板

#该脚本使用 qemu‐img 命令快速创建快照虚拟机

#脚本使用 sed 修改模板虚拟机的配置文件,将虚拟机名称、UUID、磁盘文件名、MAC 地址

exit code:

#    65 ‐> user input nothing

#    66 ‐> user input is not a number

#    67 ‐> user input out of range

#    68 ‐> vm disk image exists

IMG_DIR=/var/lib/libvirt/images

BASEVM=rh7_template

read ‐p "Enter VM number: " VMNUM

if [ $VMNUM ‐le 9 ];then

VMNUM=0$VMNUM

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/ IMG_D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值