2024年shell运算方法,一个Linux运维程序员的面试心得

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

批量加10个用户,以student1到student10命名,并统一加一个新组,组名为class,统一改密码为123(统一把密码改成就是自己的用户名,使用passwd命令和EOF结合?)

groupadd class

for i in seq 10
do
       useradd -G class “student i "        e c h o 123 ∣ p a s s w d − − s t d i n " s t u d e n t i"        echo 123 | passwd --stdin "student i"      echo123∣passwdstdin"studenti” > /dev/null  2>&1
done

----------------
groupadd class

for i in seq 10
do

useradd -G class “student i " p a s s w d " s t u d e n t i" passwd "student i"passwd"studenti” < /dev/null 2>&1
student i s t u d e n t i student istudenti
EOF  --注意这几行要顶格写
done

批量删除刚才建立的10个用户(包括把用户的家目录和邮件目录给删除干净)

for i in seq 10
do
        userdel -r “student$i”
done
groupdel class

计算1到100的奇数之和

total=0
for (( i=1 ;i <101 ;i+=2 ))
do
        total= [ [ [total+$i]
done
echo $total

total=0
for i in seq 100
do
        [ [ [ [i%2] -ne 0 ] && total= [ [ [total+$i]
done
echo $total

写一个脚本,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里(如果例举整个网段的254个IP花的时间比较长,可以只分类2.2.2.1到2.2.2.10这十个IP)

[ -e /tmp/upip ] && rm -rf /tmp/upip
[ -e /tmp/downip ] && rm -rf /tmp/downip

for i in seq 10
do
        ip=“2.2.2.$i”
        a=ping -c 1 $ip |grep  transmitted |cut -d" " -f4
        [ KaTeX parse error: Expected 'EOF', got '&' at position 11: a -eq 0 ] &̲& echo "ip" >> /tmp/downip || echo “$ip” >> /tmp/upip
done

echo “能ping通的ip有:”
cat /tmp/upip

echo “#################”
echo “不能ping通的ip有:”
cat /tmp/downip

read输入一个目录,找出目录下为死链接的文件(同步也要判断子目录下的所有文件又如何写?)

read -p “输入一个目录:” dir

for i in $dir/*
do
        [ -h $i -a ! -e KaTeX parse error: Expected 'EOF', got '&' at position 5: i ] &̲& echo "i是死链接"
done

------------------------

read -p “输入一个目录:” dir

for i in  find $dir -type l
do
        [ ! -e KaTeX parse error: Expected 'EOF', got '&' at position 5: i ] &̲& echo "i是死链接"
done

用read输入一个目录,使用脚本判断目录里每个文件的权限(是否可读,是否可写,是否可执行)

#!/bin/bash

read -p “输入一个目录:” dir

[ -d $dir ] && echo “是一个目录,继续执行” || echo “不是一个目录,请重新运行脚本”

for i in find $dir -type f
do
        [ -r $i ] && r=yes || r=no
        [ -w $i ] && w=yes || w=no
        [ -x $i ] && x=yes || x=no

echo “当前用户对$i的权限为:”
echo $r
echo $w
echo $x

done

用read输入一个用户,再用read输入一个目录,使用脚本判断目录里每个文件的权限(read输入的用户对其是否可读,是否可写,是否可执行)
–提示:如何去用root用户去变成一个普通用户身份去执行脚本? man su 查看-c参数

–第一个脚本
[root@dns shell02]# cat example10.sh
#!/bin/bash

read -p “输入你要判断的用户名:” name

id $name > /dev/null 2>&1

if [ $? -eq 0 ];then
         echo “用户名存在,继续执行”
else
         echo “用户名不存在,请重新运行脚本,输入正确的用户名”
        exit 1
fi

su - $name -c “sh /tmp/example102.sh”

第二个脚本: --此脚本最后放到/tmp下,让所有用户可以执行
[root@dns shell02]# cat example102.sh
#!/bin/bash

user=id | cut -d"(" -f2 |cut -d ")" -f1   --查找自己的用户名,可以用whoami替代

read -p “输入一个目录:” dir

if [ -d $dir ];then
        echo “是一个目录,继续执行”
else
        echo “不是一个目录或目录不存在,请重新运行脚本”
        exit 1
fi

for i in find $dir -type f
do
        [ -r $i ] && r=yes || r=no
        [ -w $i ] && w=yes || w=no
        [ -x $i ] && x=yes || x=no

echo “ u s e r 对 user对 useri的权限为:”
echo “read= r " e c h o " w r i t e = r" echo "write= r"echo"write=w”
echo “execute=$x”

done

=================================

until 循环 --直到满足条件就退出循环
 
 例十二:用until实现打印1到5
a=1
until [ $a -gt 5 ]    for ((a=1;a>5;a++))
do
        echo $a
        let a++
done

练习:
使用unitl去改写上面的批量加用户的脚本

groupadd class

i=1
until [ $i -gt 10 ]
do

useradd -G class “student i " p a s s w d " s t u d e n t i" passwd "student i"passwd"studenti” < /dev/null 2>&1
student i s t u d e n t i student istudenti
EOF  
let i++
done

=====================================================

while  用于不定次数的循环,或死循环

while  [条件]
do
 command
done

死循环两种:

while true
do
 command
done

while :
do
 command
done

写一个30秒就时间同步2.2.2.35一次的脚本

while true
do
        rdate -s 2.2.2.35
        sleep 30
done

–不定次数循环,当满足一定条件,就退出循环
while true
do
        rdate -s 2.2.2.35  > /dev/null 2>&1
        [ $? -ne 0 ] && echo “rdate failed” | mail root && exit 100
        sleep 30
done

写一个小闹钟的程序  (每秒都显示时间,当到了时间,就循环打印5个*,间隔一秒)

while true
do
        now=date +%H:%M:%S
        echo $now
        sleep 1
        clear
        if [ “ 1 " = = " 1" == " 1"=="now” ];then
                for (( i=0;i<10;i++))
                do
                        echo -n “*”
                        sleep 1
                done
                break  --在这里是表示打完*后,跳出循环,继续执行循环体后面的代码;如果换成exit则表示直接退出脚本
        fi
done

echo
echo ‘it is time’

#!/bin/bash

read -p “输入你定时的时间(格式为时:分:秒):” ntime

while true
do
        now=date +%H:%M:%S
        echo n o w         s l e e p 1         c l e a r         i f [ " now         sleep 1         clear         if [ " now       sleep1       clear       if["ntime" == “$now” ];then
                for (( i=0;i<10;i++))
                do
                        echo -n “*”
                        sleep 1
                done
                break
        fi
done

echo
echo “时间到了”

break  continue  exit
–continue表示循环体内下面的代码不执行,重新开始循环
–break表示跳出循环体,执行循环体外的下面的代码
–exit表示直接跳出程序

写一个简单的猜数字的脚本

#!/bin/bash

num=74

while true
do
        read -p “guess your number:” guess

[ $guess -gt $num ] && echo “大了” && continue 
        [ $guess -lt $num ] && echo “小了” && continue
        [ $guess -eq $num ] && echo “对了” && break
done

echo “砸蛋”

找出/etc/的所有以conf结尾的文件,拷到/tmp/conf目录下,然后全部把conf结尾换成以html结尾

[ -d /tmp/conf ] &&  rm /tmp/conf -rf && mkdir /tmp/conf

find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;
cd /tmp/conf
rename .conf .html *


#!/bin/bash

if [ -d /tmp/conf ];then
         rm -rf /tmp/conf
         mkdir /tmp/conf
else
        mkdir /tmp/conf
fi

find /etc/ -name “*.conf” -exec cp {} /tmp/conf ;

cd /tmp/conf

for i in ./*
do
        head=echo $i |awk -F".conf" '{print $1}'
        mv $i $head.html
done

找出/usr/share/doc目录下所有文件名为index.html的文件,把他们拷到/tmp/index目录下,文件名按找到的先后更改,第一个找到的为index.html.1,第二个找到的为index.html.2。。。。类推

[ -e /tmp/index -a  -d /tmp/index ] && rm -rf /tmp/index && mkdir /tmp/index

i=1
find /usr/share/doc/ -name index.html | while read a
do
        cp a / t m p / i n d e x / i n d e x . h t m l . a /tmp/index/index.html. a/tmp/index/index.html.i
        let i++
done

==============================================================

===========================

循环嵌套

打印出
1  
12
123
1234
12345

*
**
***
****
*****
******

*
**
* *
*  *
*   *
******

第一种写法:
a=1
while [ a − l t 6 ] d o         f o r ( ( b = 1 ; b < = a -lt 6 ] do         for (( b=1;b<= alt6]do       for((b=1;b<=a;b++ ))
        do
                echo -n $b
        done
        let a++
        echo
done
第二种写法:
a=1
while [ $a -lt 6 ]
do
        b=1
        while [ $b -le $a ]
        do
                echo -n $b
                let b++
        done
        let a++
        echo
done

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

aid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值