美文网首页Shell
Shell常见基础问题

Shell常见基础问题

作者: 一个小运维 | 来源:发表于2021-07-10 10:03 被阅读0次
    1 如何执行一个未设置x权限的Shell脚本?
    以下三种方式任选其一:
    sh 脚本文件路径
    source 脚本文件路径
    . 脚本文件路径
    
    2 自定义Shell变量时,变量名有什么规则?
    可以包括数字、字母、下划线,不能以数字开头
    变量名区分大小写
    赋值时等号两边不要有空格
    尽量不要使用关键字和特殊字符
    给同一个变量多次赋值时,最后一次的赋值生效
    
    3 简述预定义变量$$、?、0、\#、*、$!的作用。
    $$ 保存当前运行进程的(PID)号
    $? 保存命令执行结果的(返回状态)
    $0 保存当前运行的(进程名)或(脚本名)
    $# 保存位置变量的(个数)
    $* 保存所有位置变量的(值)
    $! 保存后台(最后一个进程)的PID号
    
    4 简述三种定界符在变量赋值操作中的特点。
    双引号 " ":允许扩展,以 $ 引用其他变量
    单引号 ' ':禁用扩展,即便 $ 也视为普通字符
    反撇号 ` `:将命令的执行输出作为变量值
    
    5 计算根分区的磁盘使用率,百分比精确到2位小数。
    参考答案
    执行df命令可列出已挂载的文件系统使用情况:
    [root@svr5 ~]# df 
    Filesystem                   1K-blocks    Used Available Use% Mounted on
    /dev/mapper/VolGroup-lv_root  51606140 4292504  44692196   9% /
    tmpfs                           502204     228    501976   1% /dev/shm
    /dev/sda1                       495844   34880    435364   8% /boot
    /dev/mapper/VolGroup-lv_home  28455944  586380  26424088   3% /home
    .. ..
    可以看到根分区的使用率为9%,百分比不带小数位。
    手动计算时,可以用Used栏的已用量除以1K-block栏的总量乘以100,即可获得准确的百分比。结果涉及到小数,因此可以使用bc工具来实现。
    [root@svr5 ~]# echo 'scale=2;4292504*100/51606140' | bc   
    8.31
    即当前根分区的准确使用率为8.31%。
    
    6 列出常见的整数值比较操作,并说明各自作用。
    *   -eq 等于(Equal)
    *   -ne 不等于(Not Equal)
    *   -ge 大于或等于(Greater or Equal)
    *   -le 小于或等于(Lesser or Equal)
    *   -gt 大于(Greater Than)
    *   -lt 小于(Lesser Than)
    
    7 运用条件测试操作,检查当前的用户是否为root。
    [root@svr5 ~]# [ $USER == "root" ] && echo "yes" || echo no
    yes
    [root@svr5 ~]# su - mike
    [mike@svr5 ~]$ [ $USER == "root" ] && echo "yes" || echo no
    no
    
    8 编写uaddfor.sh脚本,根据用户名列表快速添加用户账号。

    需要添加的账号名称保存在/root/users.txt文件中,每行一个用户名。要求在执行uaddfor.sh脚本后,能够为这些用户名快速添加好系统账号,并将登录密码设置为1234567。

    1)准备测试用的账号列表文件
    
    [root@svr5 ~]# vim /root/users.txt 
    linzhiying
    guotao
    tianliang
    
    2)编写uaddfor.sh脚本文件
    
    [root@svr5 ~]# vim uaddfor.sh   
    #!/bin/bash
    ULIST=$(cat /root/users.txt)
    for UNAME in $ULIST
    do
    useradd $UNAME
    echo "1234567" | passwd --stdin $UNAME &> /dev/null
    done
    [root@svr5 ~]# chmod +x uaddfor.sh
    
    3)测试、验证执行效果
    
    [root@svr5 ~]# tail -3  /etc/passwd
    linzhiying:x:527:527::/home/linzhiying:/bin/bash
    guotao:x:528:528::/home/guotao:/bin/bash
    tianliang:x:529:529::/home/tianliang:/bin/bash
    
    9 编写sumwhile脚本,计算从1-100之间所有整数的和。
    1)编写sumwhile.sh脚本文件
    [root@svr5 ~]# cat sumwhile.sh 
    #!/bin/bash
    sum=0 ; i=1
    while [ $i -le 100 ]
    do
    let sum+=$i
    let i++
    done
    echo "1-100的总和是:$sum"
    [root@svr5 ~]# chmod +x sumwhile.sh
    2)测试、验证执行效果
    [root@svr5 ~]# ./sumwhile.sh 
    1-100的总和是:5050
    
    10 简述Linux服务脚本中的case分支结构。

    Linux服务脚本通常利用$1位置变量来获取控制参数,并结合case分支来做出不同的响应,典型的结构如下:

    case  "$1"  in                                              //检查第一个位置参数
      start)
            echo  "启动服务.. .." ;;                             //启动服务的语句块
      stop)
            echo  "停止服务.. .." ;;                               //停止服务的语句块
      restart)
            $0  stop                                            //停止服务
            $0  start                                           //启动服务
            ;;
      *)
            echo  $"用法: $0 {start|stop|restart}"             //提示正确用法
            exit 1 
    esac
    
    11 简述定义一个Shell函数的两种方法。
    方法1:
    function  函数名 {
        命令序列
        .. ..
    }
    方法2:
    函数名() {
        命令序列
        .. ..
    }
    
    12 简述Shell环境常见的中断及退出控制指令。
    break:跳出当前所在的循环体,执行循环体后的语句。
    continue:跳过循环体内余下的语句,重新判断条件以便执行下一次循环。
    exit:退出脚本,默认返回值是 0。
    

    相关文章

      网友评论

        本文标题:Shell常见基础问题

        本文链接:https://www.haomeiwen.com/subject/jqccpltx.html