誉天教育,武汉誉天,誉天ICT认证培训.png/

Datapass

数通
当前位置:首页 > 誉天学堂 > 运维 > 【誉天红帽入门指南】第七期:SHELL基础

【誉天红帽入门指南】第七期:SHELL基础

  • 2023/09/01

在上一期,我们为大家分享了VIM编辑器的一些应用,具体详情可以点击传送门查看:【誉天红帽入门指南】第六期:VIM编辑器的高级应用。


本期我们继续为大家带来 RHEL 8.0 的知识分享——shell基础


随着Linux企业应用越来越多,维护Linux日常工作频繁,所以如果单靠手工去敲打命令是非常困难的,所以学会熟练使用SHELL编程来实现自动化运维是每个Linux 系统管理员必备的技能。


1.png


Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序,用户每输入一条命令,Shell就解释执行一条。Shell存在于操作系统的最外层,负责和用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统输出结果 ,然后输出到屏幕返回给用户,而Shell脚本就是命令或程序语句不在命令行下执行,而是通过一个程序文件来执行。

2.png


在Linux系统中,Shell脚本通常是使用Vim编辑器进行编写,其内容大多数是命令和程序结构控制语句以及注释构成。其规范的格式如下:


Shell脚本的第一行为指定脚本解释器,通常为:

#/bin/bash   或    #/bin/sh


Shell脚本添加版本和个人信息

# Date:  2020-03-14  05:20

# Author: Yang Feng

# Description: my first script

# Version: 1.0


Shell脚本中尽量不使用中文

Shell脚本的命名应该以.sh为扩展名

Shell脚本应该放在固定的路径下,如/opt/scripts

使用合适的代码缩进规范


3.png


Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。


SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。


4.png


在Linux Shell编程中,if、for等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将逐个来讲解具体的用法:


Ø If条件判断语句


         If (表达式) #if ( Variable in Array )
         语句1
         else  
         语句2   
         fi


    案例一:测试数字大小


           #!/bin/sh   
           NUM=100   
           if (( $NUM > 4 )) ;then   
           echo “this num is $NUM greater 4 !”   
           fi


      案例二:测试目录是否存在,不存在则新建(注意,中括号之间必须要空格


             #!/bin/sh   
             #judge dir exist
             if [ ! -d /data/20200520 ];then   
             mkdir -p /data/20200520   
             else   
             echo “This DIR is exist,Please exit …..”   
             fi


        逻辑运算符解析:

        -f  判断文件是否存在 eg: if [ -f filename ]

        -d  判断目录是否存在 eg: if [ -d dir     ]

        -eq 等于,应用于:整型比较

        -ne 不等于,应用于:整型比较

        -lt 小于,应用于:整型比较

        -gt 大于,应用于:整型比较

        -le 小于或等于,应用于:整型比较

        -ge 大于或等于,应用于:整型比较

        -a 双方都成立(and) 逻辑表达式 –a 逻辑表达式

        -o 单方成立(or) 逻辑表达式 –o 逻辑表达式

        -z 空字符串


        案例三:多个条件测试判断


               #!/bin/shscores=80;   
               if [[ $scores -gt 85 ]]; then   
               echo "very good!";   
               elif [[ $scores -gt 75 ]]; then   
               echo "good!";   
               elif [[ $scores -gt 60 ]]; then   
               echo "pass!";   
               else
               echo "no pass!";   
               fi;


          Ø 循环语句for


                 For 变量 in 字符串   
                 do   
                 语句1   
                 done


            案例一:打印seq多个数


                   #!/bin/sh   
                   for i in `seq 15`   
                   do   
                   echo “NUM is $i”   
                   done


              案例二:找到相关log,然后批量打包


                     #!/bin/sh   
                     for i in `find /var/log -name “*.log”`   
                     do   
                     tar –czf 2020log.tgz $i   
                     done


                5.png


                1. 显示用户工作目录、登录用户、家目录、系统时间、备份脚本。


                       #! /bin/bash   
                       #this is a sample script   
                       echo My current work directory is `pwd`
                       echo My current login name is $USER,   
                       home directory is $HOME echo My current time is `date '+%Y/%m/%d %H:%M:%S'`   
                       cp -r /etc /backup/etc-$(date +%Y-%m-%d-%H-%M-%S) echo 'backup complate!!!!!!'


                  2. 备份 sysconfig 文件,附加备份时间并显示备份完成时间。


                         #! /bin/bash   
                         #this script creates a backup of /etc/sysconfig #into a date stamped subdirectory of ~/backups/   
                         cp -av /etc/sysconfig ~/backups/sysconfig-$(date +%Y%m%d) echo "Backup of /etc/sysconfig completed at: $(date)"


                    3. 使用 for 循环创建文件列表中用户。


                           #! /bin/bash   
                           #creat user for userlist   
                           for num in $(cat ~/userlist.txt) do   
                           USERS=$num useradd $USERS   
                           echo "$USERS" | passwd --stdin $USERS done


                      4. 将/tmp 文件夹中所有文件扩展名改为.doc。


                             #! /bin/bash   
                             #this is a rename script for files in $(ls /tmp) do   
                             files1=$(echo $files |cut -d '.' -f1) mv /tmp/$files /tmp/$files1.doc   
                             done


                        5. 检查 vsftpd 服务启动状态脚本。


                               #!/bin/bash vsftpd=$(pidof vsftpd) if [ -n "$vsftpd" ];then   
                               echo "vsftp is running "   
                               else fi   
                               service vsftpd restart


                          6. 检查 172.25.254.1~30 这段 IP 地址主机状态是否正常。


                                 #! /bin/bash   
                                 #this is a ping test script for num in {1..30}   
                                 do   
                                 ping -c1 172.25.254.$num &> /dev/null if [ "$?" = 0 ];then   
                                 echo "172.25.254.$num is up." else   
                                 echo "172.25.254.$num is down."   
                                 fi done



                            7. 比较用户输入的数是否小于、等于、大于 100。


                                   #! /bin/bash   
                                   TEST=100
                                   read -p "please input a number :" num if [ $num -lt $TEST ];then   
                                   echo "$num



                              8.  判断/tmp/redhat 文件夹是否存在,并确保拷贝/root/*.txt 到/tmp/redhat 文件夹一定成功。


                                     #! /bin/bash   
                                     #this is a copy file script DIR="/tmp/redhat"   
                                     if [ -f "$DIR" ];then   
                                     rm -rf /tmp/redhat && echo "$DIR file deleted" mkdir $DIR
                                     elif [ -d "$DIR" ]; then   
                                     echo "$DIR directory exist" else   
                                     mkdir $DIR   
                                     fi   
                                     cp /root/*.txt $DIR && echo "Copy completed"


                                9. 检查根分区空间,当空间使用率大小 40%时,发邮件给 user1 用户。


                                       #! /bin/bash   
                                       #this is a check disk space script   
                                       use=$(df -h|grep -w '/'|awk '{print $5}'|cut -d'%' -f1) num=40   
                                       if [ "$use" -gt "$num" ];then   
                                       echo "diskspace is >40%."|mail -s 'disk infomation' user1 else   
                                       echo "diskspace is<40%." Fi


                                  10. 根据用户提供的用户列表创建用户,并指定创建用户的登录shell。


                                         #!/bin/bash   
                                         if [ -z "$1" ];thenecho "Usage: /root/batchusers.sh" exit 1   
                                         elif [ -f "$1" ];then   
                                         for A in $(cat $1) do   
                                         else   
                                         done   
                                         useradd -s /bin/false $A   
                                         echo "Input file not found" exit 2   
                                         fi


                                    11. 创建列表中用户,利用随机数字作为用户密码,发用户、密码信息给用户,并将用户、  密码信息导出到一个文件列表中。


                                           #!/bin/bash #create user.   
                                           for USERS in $(cat /root/userlist.txt) do   
                                           id $USERS >>/dev/null if [ $? = 0 ];then   
                                           echo "$USERS already exit" else   
                                           useradd $USERS PASSWORD=$(openssl rand -base64 4)   
                                           echo "$PASSWORD"|passwd --stdin $USERS   
                                           echo "USERNAME: $USERS,PASSWORD: $PASSWORD"|mail -s "username and passowrd"$USERS   
                                           echo "USERNAME: $USERS,PASSWORD: $PASSWORD" >>/root/user.txt fi   
                                           done


                                      12. 提示用户输入用户名、密码,创建用户脚本,判断用户是否存在,密码是否为空。


                                             #!/bin/bash   
                                             #this script is useful to create user.   
                                             read -p "Please Input a UserName: " USER id $USER &>/dev/null   
                                             if [ $? = 0 ];then   
                                             echo "$USER already exist" exit 1   
                                             else   
                                             useradd $USER   
                                             read -p "Please Input a Password: " PASSWD if [ -z $PASSWD ];then   
                                             echo "Password is null,Please try on." exit 2   
                                             else   
                                             echo "$PASSWD"|passwd --stdin $USER   
                                             fi   
                                             fi

                                        返回列表
                                        上一篇:
                                        【誉天红帽入门指南】第六期:VIM编辑器的高级应用
                                        下一篇:
                                        【誉天红帽入门指南】第八期:字符处理
                                        免费试听
                                        姓名
                                        电话
                                        城市
                                        咨询课程