Linux学习41 yum实战进阶及shell脚本实现磁盘管理实战

一、概述

  1、桌面环境:

    Windows7,OpenSUSE 13.2,Kubuntu(KDE)

  2、yum安装回顾

    a、yum程序包管理器

      C/S:

        yum client(yum)

        yum repository(ftp/http/https)

        

        

        base:主包

        extras:额外的包

        updates:升级包

      repo定义

        [id]

        name=

        baseurl=http://

            http://

    b、子命令

      list,clean,makecache,grouplist,whatprovides

      install,update,remove,groupinstall,groupupdate,groupremove,groupinfo

      yum install /usr/local/src/testapp-3.3.1-1.el7.x86_64.rpm #通过这种方式安装此rpm包,当安装此rpm包需要依赖其它安装包时,若yum仓库存在的话他会自动解决依赖关系安装相应的依赖包。但是如果通过rpm -ivh安装此rpm包的话就不能自动解决。

  3、编译安装回顾

    a、C/C++:

      ./configure --> Makefile.in ==> makefile

      make + makefile ==> binary,library,configfile,manual

      make install

二、bash脚本编程

  1、过程式编程语言的执行流程

    顺序执行

    选择执行

    循环执行

  2、选择执行:

    (1)、&&,||

    (2)、if语句

    (3)、case语句

  3、if语句:三种格式-

    a、单分支的if语句

      if CONDITION;then

        if-true-分支

      fi

    b、双分支的if语句

      if CONDITIOON;then

        if-true-分支

      else

        if-false-分支

      fi

    c、多分枝的if语句

      if CONDITION1;then

        条件1为真分支

      elif CONDITION2;then

        条件2为真分支

      elif CONDITION3;then

        条件3为真分支

      ...

      elif CONDITIONn;then

        条件n为真分支

      else

        所有条件均不满足时的分支

      fi

      注意:即便多个条件可能同时都能满足,分支只会执行其中一个,首先测试为“真”。

      示例:脚本参数传递一个文件路径给脚本,判断此文件的类型。

[[email protected] script]# cat filetype.sh
#!/bin/bash
if [ $# -lt 1 ];then
    echo "At least one path"
    exit 1
fi

if ! [ -e "$1" ];then
    echo "No such file"
    exit 2
fi

if [ -f $1 ];then
    echo "Common file"
elif [ -d $1 ];then
    echo "Directory"
elif [ -L $1 ];then #是否存在并且为符号链接
    echo "Symbolic link"
elif [-b $1 ];then
    echo "block special file"
elif [ -c $1 ];then
    echo "character special file"
elif [ -S $1 ];then
    echo "Socket file"
else
    echo "Unkown"

fi
[[email protected] script]# bash -n filetype.sh
[[email protected] script]# bash -x filetype.sh /etc/
+ ‘[‘ 1 -lt 1 ‘]‘
+ ‘[‘ -e /etc/ ‘]‘
+ ‘[‘ -f /etc/ ‘]‘
+ ‘[‘ -d /etc/ ‘]‘
+ echo Directory
Directory

    d、注意:if语句可嵌套

    e、练习:写一个脚本

      (1)、传递一个参数给脚本,此参数为用户名

      (2)、根据其ID号来判断用户类型

        0:管理员

        1-999:系统用户

        1000+:登陆用户

[[email protected] script]# cat usertype.sh
#!/bin/bash
[ $# -lt 1 ] && echo "At least on user name." && exit 1

! id $1 &> /dev/null && echo "No such user." && exit 2

userid=$(id -u $1)

if [ $userid -eq 0 ];then
    echo "root"
elif [ $userid -ge 1000 ];then
    echo "login user."
else
    echo "System user."
fi
[[email protected] script]# bash -n usertype.sh
[[email protected] script]# bash -x usertype.sh
+ ‘[‘ 0 -lt 1 ‘]‘
+ echo ‘At least on user name.‘
At least on user name.
+ exit 1
[[email protected] script]# bash -x usertype.sh root
+ ‘[‘ 1 -lt 1 ‘]‘
+ id root
++ id -u root
+ userid=0
+ ‘[‘ 0 -eq 0 ‘]‘
+ echo root
root

    f、练习:写一个脚本

      (1)、列出如下菜单给用户

          disk)show disks info

          mem) show memory info

          cpu) show cpu info

            cat /proc/cpuinfo或lscpu命令即可

          *) quit

      (2)、提示用户给出自己的选择,而后显示对应其选择的相应系统信息

[[email protected] script]# cat sysinfo.sh
#!/bin/bash
cat <<EOF
disk) show disks info
mem) show memory info
cpu) show cpu info
*) QUIT
EOF
read -p "Your choice: " option
if [[ "$option" == "disk" ]];then
    fdisk -l /dev/[sh]d[a-z]
elif [[ "$option" == "mem" ]];then
    free -m
elif [[ "$option" == "cpu" ]];then
    lscpu
else
    echo "Unkown option."
    exit3
fi
[[email protected] script]# bash sysinfo.sh
disk) show disks info
mem) show memory info
cpu) show cpu info
*) QUIT
Your choice: mem
              total        used        free      shared  buff/cache   available
Mem:           1991         145        1031           9         815        1606
Swap:          2047           0        2047
[[email protected] script]# 

三、循环执行

  1、将一段代码重复执行0,1或多次

    进入条件:条件满足时才进入循环

    退出条件:每个循环都应该有退出条件,以有机会退出循环;

  2、bash脚本有三种方式

    for循环

    while循环

    until循环

  3、for循环

    a、两种格式

      (1)、遍历列表

        列表的生成方式:

          1)、直接给出

          2)、整数列表

            i、{start..end}

            ii、seq   

              seq [OPTION]... LAST:比如seq 3 就表示输出1,2,3三个数

              seq [OPTION]... FIRST LAST:比如seq 1 5就表示输出1到5
              seq [OPTION]... FIRST INCREMENT LAST:比如seq 1 2 11  就表示1到11步长为2输出,即每次加2输出

[[email protected] script]# seq 1 2 11
1
3
5
7
9
11

          3)、返回列表的命令,比如 ls /var或cat /etc/issue等,返回值相当于也是列表

          4)、glob,比如 ls /etc/p*

          5)、变量引用

            [email protected],$*

      (2)、控制变量

    b、遍历列表

      for VARAIBLE in LIST;do

        循环体

      done

      进入条件:只要列表有可用元素,即可进入循环。

      退出条件:列表中的元素遍历完成。

      示例1:批量添加用户

[[email protected] script]# cat useradd3.sh
#!/bin/bash
for username in user21 user22 user23;do
    useradd $username
done

[[email protected] script]# bash -x useradd3.sh
+ for username in user21 user22 user23
+ useradd user21
+ for username in user21 user22 user23
+ useradd user22
+ for username in user21 user22 user23
+ useradd user23
[[email protected] script]# 
[[email protected] script]# cat useradd3.sh
#!/bin/bash
for username in user21 user22 user23;do
    if id $username &> /dev/null;then
        echo "$username exists."
    else
        useradd $username && echo "Add user $username finished."
    fi
done

      示例2:在/tmp目录下添加10个临时文件

[[email protected] script]# cat addfile.sh
#!/bin/bash
for filename in $(seq 1 10);do
    touch /tmp/f$filename
done
[[email protected] script]# bash -x addfile.sh
++ seq 1 10
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f1
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f2
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f3
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f4
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f5
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f6
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f7
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f8
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f9
+ for filename in ‘$(seq 1 10)‘
+ touch /tmp/f10

      示例3:求100以内所有正整数之和

[[email protected] script]# cat sum2.sh
#!/bin/bash
declare -i sum=0
for i in {1..100};do
    sum=$[ $sum+$i ]
done
echo $sum
[[email protected] script]# bash sum2.sh
5050

      示例4:判断/var/log下的每一个文件的内容类型

[[email protected] script]# cat filetype2.sh
#!/bin/bash
for filename in /var/log/*;do
if [ -f $filename ];then
    echo "Common file"
elif [ -d $filename ];then
    echo "Directory"
elif [ -L $filename ];then #是否存在并且为符号链接
    echo "Symbolic link"
elif [-b $filename ];then
    echo "block special file"
elif [ -c $filename ];then
    echo "character special file"
elif [ -S $filename ];then
    echo "Socket file"
else
    echo "Unkown"

fi
done

四、练习

  1、分别求100以内所有偶数之和,以及所有奇数之和

  2、计算当前系统上的所有用户id之和

  3、通过脚本参数传递一个目录给脚本,而后计算此目录下所有文本文件的行数之和,并说明此类文件的总数

原文地址:https://www.cnblogs.com/Presley-lpc/p/12370025.html

时间: 2024-10-11 08:57:11

Linux学习41 yum实战进阶及shell脚本实现磁盘管理实战的相关文章

Linux学习笔记:bash颜色显示及shell脚本相关

bash的颜色显示规则: ASCII编码对于颜色进行设置: \033 :ctrl键 [:控制字符和颜色代码之间的间隔字符 0m:关闭颜色属性的命令: 1m:对于显示文本字符加粗 4m:为文本字符加下划线标识 5m:使文本字符闪烁 7m:将文本字符的背景色和前景色交换显示: 8m:将文本字符的背景色和前景色设置为相同颜色. 30m-39m:设置文本字符的前景色:38m和39m暂时没用 40m-49m:设置文本字符的背景色:48m和49m暂时没用 一个完整的程序,一般包含四类文件: 二进制文件(可执

Linux学习总结(五十七) shell脚本1

1 什么shellshell是一种脚本语言 可以使用逻辑判断.循环等语法可以自定义函数shell是系统命令的集合shell脚本可以实现自动化运维,能大大增加我们的运维效率2 shell脚本结构和执行方法开头需要加#!/bin/bash以#开头的行作为解释说明脚本的名字以.sh结尾,用于区分这是一个shell脚本执行方法有两种chmod +x 1.sh; ./1.shbash 1.sh查看脚本执行过程 bash -x 1.sh查看脚本是否语法错误 bash -n 1.sh3 date命令用法 da

Linux学习总结(六十)shell脚本4-函数及数组

一 shell 中的函数 1 先了解脚本的几个系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 [email protected] 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前进程ID号 $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误 2 函数的定义及用法函数就是把一段代码整理到了一个小单元中,并

linux学习笔记-第十二课-Shell脚本之正则表达式(一)

一.grep,egrep,fgrep 1)grep 格式:grep [选项] [模式] [文件名] 常用选项:-n:显示行号和匹配的行 -v:反向匹配 -c:不显示匹配的行,只显示匹配的行数 -i:忽略大小写 -r:递归搜索 -E:支持扩展正则表达式 -P:支持Perl正则表达式 -F:不支持正则表达式,将模式按字面意义匹配 示例: grep示例 说明 grep '\<Tom>\' file 显示包含单词Tom的行 grep 'Tom Jerry' file 显示包含'Tom Jerry'的行

Linux学习—部署yum网络仓库

yum除了可以配置本地仓库外,还可以配置服务器网络仓库,这时需要先配置服务器并上传文件 步骤如下: 1.安装 vsftpd 为了完成服务器与客户端的文件传输,需要使用FTP协议,在Linux下使用vsftpd软件(Very Secure FTP Daemon)完成部署FTP服务器 使用rpm命令安装vsftpd: ① rpm -ivh vsftpd-2.2.2-24.el6.x86_64.rpm 2.启动vsftpd服务及设置重启后自动启动 使用命令netstat查看vsftpd的监听状态为关闭

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化

马哥教育视频学习笔记-shell脚本完成磁盘分区格式化-http://edu.51cto.com/lesson/id-28201.html 以下是脚本内容,内容比较简单,不做详解 在Linux上准备一块空闲的磁盘即可,如何分区可以在脚本内改下 #!/bin/bash # echo "Initial a disk..." echo -e "\033[31mWarning: \033[0m " #开始的说明信息,其中Warning以红色字体显示 fdisk -l 2&g

Linux下定时备份MySQL数据库的Shell脚本

Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说.于是,有了下面这段脚本的出现.参考了网上的很多教程,外加自己的测试,以下脚本经测试可用.#!/bin/bash#Shell Command For Backup MySQL Database Everyday Automatically By Crontab#Author :

Linux运维系统工程师系列之shell脚本一则小随笔

shell随笔 一.   学好shell编程的知识储备 前面讲过,给大家留作业Linux系统命令应用: Vi/vim 编辑器的熟练使用,SSH客户端软件的设置: 基础的服务,系统服务ntp,crond,网络服务:nfs,rsync,inotify,sersync,ssh,lanmp. 补充:清空日志的三种方法: echo  " " > filename.log >filename.log cat  /dev/null > filename.log 注:工作中有的时候不

Linux中使用crontab命令定时执行shell脚本或其他Linux命令

使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令.例如系统管理员安排一个备份任务使其每天都运行 如何往 cron 中添加一个作业? # crontab –e0 5 * * * /root/bin/backup.sh 这将会在每天早上5点运行 /root/bin/backup.sh Cron 各项的描述 以下是 crontab 文件的格式: {minute} {hour} {day-of-month} {month} {day-of-week} {full-pat