zoukankan      html  css  js  c++  java
  • shell脚本-题

    1:用source执行脚本和用bash执行Shell脚本的区别是什么?

      source 执行脚本,其中的变量赋值是在当前shell的bash 执行脚本,其中的shell是在下一级的bash的所以,这个变量值,并不在当前shell中,而是在shell中

    2:如何自定义环境变量?

      环境变量在 /etc/profile 或者 ~/.protfile 文件中定义,使用export 参数来定义环境变量同时,使用source或.命令让其生效。

    3:定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?应该怎么用?

      单引号表示输入是什么,显示的就是什么(单引号将剥夺其中的所有字符的特殊含义)

      双引号为固定字符串,解决空格问题

      反引号表示输出的是命令执行的结构,同$()

    4:请分别说出2个以上用于整数运算特殊符号或命令,以及适合小数运算的命令。

      整数:+ - let  

      小数:bc awk /

    5:写出特殊变量对应的意义及应用

      $0、$n、$#、$*、$@、$?、$$、$!、$_

      $0  脚本名字

      $n  $1,$2...${10}

      $*  所有变量--字符串显示

      $@ 所有变量--列表形式

      $?  执行上一个指令的返回值的状态

      $!  执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)

      $$  脚本运行的当前进程ID号

      $_  显示shell使用的当前选项,与set功能相同

    6:写出下面特殊变量扩展的意义

    ${test}、${#test}、${test:offset:length}、${test#word}、${test##word}、${test%word}

    ${test%word}、${test/pattern/string}、${test//pattern/string}、${test:-word}${test: -word}

      ${test}  变量调用

      ${#test}  调用变量的长度

      ${test#word}   从变量${test}开头开始删除最短匹配的word子串

      ${test##word}  从${test}开头开始删除最长匹配的word子串

      ${test%word}  从变量${test}结尾开始删除最短的匹配的word子串

      ${test%%word}  从变量${test}结尾开始,删除最长匹配的word子串

      ${test/pattern/string}  使用string替代第一个匹配的pattern

      ${test//pattern/string}  使用string替代所有匹配的pattern

      ${test:-word}  如果test变量值为空,或未赋值,就回返回word字符替换变量值。

    7:在条件测试与表达式中,[]和[[]]有何区别?

      [ 测试表达式 ]一条判断语句,如果是多个条件判断,使用-a -o来联合起来

      [[ 测试表达式 ]]多条语句的联合判断,使用 && || 来关联测试语句

    8:说出适合在[]以及test中整数比较的特殊运算符号?

      -eq -en -lt -le -gt -ge

      -e -f -L -d -b -r -w -x

      -a -o !

      -z -n = !=

    9、输出下面菜单

      1.install MySQL

      2.install Tomcat

      3.exit当用户选择对应的数字就开始安装对应的服务(可echo输出替代),需要对用户输入的数字进行判断是否为整数(用条件测试表达式实现)。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 01:20:37
    # Name: caidan.sh
    # Version: v1.0
    # Description: This is my Script.
    cat << EOF
    =====================
    1.install MySQL
    2.install Tomcat
    3.exit
    ====================
    EOF
    read -p "请输入需要安装对应服务的数字:" num
    expr $num + 1 &>/dev/null
    if [ $? -ne 0 ];then
        echo "请输入需要安装对应服务的数字{1|2|3}"
        exit 1
    fi
    if [ $num -eq 1 ];then
        yum install MySQL
        exit 1
    elif [ $num -eq 2 ];then
        yum install Tomcat
        exit 2
    elif [ $num -eq 3 ];then
        echo exit
    else
        echo "请输入一个整数"
    fi

    10、随机生成十个数进行大小比较,并打印最大数值(用条件表达式实现)。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 22:36:45
    # Name: suiji.sh
    # Version: v1.0
    # Description: This is my Script.
    declare -a a
    declare -i max=0
    for i in `seq 0 9`;do
         a[$i]=$RANDOM
        [ ${a[$i]} -gt $max ] && max=${a[$i]}
    done
    echo ${a[@]}
    echo "最大值为:$max"

    11开发Shell脚本判断系统根分区剩余空间的大小并打印出来,如果利用率高于70%就提示“硬盘空间不足,否则提示“硬盘空间充足

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 17:12:32
    # Name: disk.sh
    # Version: v1.0
    # Description: This is my Script.
    num=`df -m |grep "/dev/mapper" |cut -d" " -f9 |sed "s/%//"`
    if [ $num -gt 70 ];then
        echo "硬盘空间不足"
    else
        echo "硬盘空间充足,利用率为$num%"
    fi

    12分别使用变量定义、read读入及脚本传参方式实现比较2个整数的大小。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-24 23:06:36
    # Name: compare.sh
    # Version: v1.0
    # Description: This is my Script.
    read -p "请输入两个数字: " num1 num2
    if [ $num1 -gt $num2 ];then
        echo "$num1大于$num2"
    elif [ $num1 -lt $num2 ];then
        echo "$num1小于$num2"
    else
        echo "$num1等于$num2"
    fi

    13打印一个菜单如下,当用户选择对应的数字时,就执行对应项的应用,最好对用户的输入进行是否为整数判断。

      1.install lamp

      2.install lnmp

      3.exit

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 18:02:52
    # Name: menu.sh
    # Version: v1.0
    # Description: This is my Script.
    read -p "请输入一个数字:" num
    expr $num + 1 &>/dev/null
    if [ $? -ne 0 ];then
    echo "请输入:{1|2|3}"
    exit 1
    fi
    if [ $num -eq 1 ];then
        yum install lamp
        exit 1
    elif [ $num -eq 2 ];then
        yum install lnmp
        exit 2
    elif [ $num -eq 3 ];then
        echo exit
    fi

    14通过脚本传参的方式,检查Web网站URL是否正常(要求主体使用函数)。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 16:37:43
    # Name: url.sh
    # Version: v1.0
    url=http://www.baidu.com
    check_code(){
        status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
    }
    while true;do
    check_code
    date=`date +%Y%m%d-%H:%M:%S`
    echo "当前时间为:$date"
    echo "$url服务器异常,状态码为$status_code.请尽快排查异常" >/tmp/http$$.pid
    if [ $status_code -ne 200 ];then
        mail -s Warning root < /tmp/http$$.pid 
    else
        echo "$url连接正常" >> /var/log/http.log
    fi
    sleep 5
    done

    15利用case语句开发Rsync服务启动停止脚本,并能通过chkconfig实现开机自启动。

    16猜数字游戏。首先让系统随机生成一个数字,给这个数字定一个范围1-60),让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则给出猜对用的次数,请用while语句实现。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 16:42:54
    # Name: caishuzi.sh
    # Description: This is my Script. guess=$[$RANDOM % 60+1] declare -i count=1 while true;do read -p "请输入你猜的数字:" num if [ $num -lt $guess ];then echo "太小了!" elif [ $num -gt $guess ];then echo "太大了!" elif [ $num -eq $guess ];then echo "恭喜你猜对了,共猜了$count次" exit 0 fi let count++ done

    17分析apache访问日志(自备),把日志中每行的访问字节数对应字段数字相加,计算出总的访问量。给出实现程序,请用while循环实现。

    18、计算从1100中步长为3的所有数值之和(要求用for和while,至少给出两种方法)。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 01:58:00
    # Name: 100.sh
    # Version: v1.0
    # Description: 使用for循环写1-100步长为3的和..
    declare -i sum=0
    for i in `seq 1 3 100`;do
        sum=$[sum+i]
    done
    echo "1-100的和为:$sum"

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 02:02:12
    # Name: 1001.sh
    # Version: v1.0
    # Description: 使用while循环写1-100步长为3的和.
    declare -i i=1
    declare -i sum=0
    while  [ $i -le 100 ];do
        sum=$[sum+i]
            i=$i+3
    done
    echo "1-100的和为:$sum"

    19、利用awk命令和bash for循环两种方式打印下面这句话中字母数不大于6的单词(某企业面试真题)。I am dfzy teacher welcome to dfzy training class

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 18:40:28
    # Name: char.sh
    # Version: v1.0
    # Description: 使用for循环打印.
    for i in I am dfzy teacher welcome to dfzy training class;do
        [ `echo $i|wc -L` -le 6 ] && echo $i
    done

    使用awk命令打印:

    20使用read读入方式比较两个整数大小,要求对用户输入的内容严格判断是否为整数,是否输入了两个数字。

    #!/bin/bash
    # Author: 韩萌萌
    # Blog: https://www.cnblogs.com/hmm01031007/
    # Time: 2019-08-21 18:46:36
    # Name: num.sh
    # Version: v1.0
    # Description: This is my Script.
    read -p "请输入两个数:" num1 num2
    str1=$num1
    str2=$num2
    [ -z "$str1" -o -z "$str2" ]&&echo "错误的输入,你可能只输入了一个数"&& exit 1
    expr $str1 + 0 &>/dev/null
    [ $? -ne 0 ] && echo "$str1必须是整数!"&&exit 2
    expr $str2 + 0 &>/dev/null
    [ $? -ne 0 ] && echo "$str2必须是整数!"&&exit 2
    if [ $str1 -eq $str2 ];then
            echo "两个数相等"
    elif [ $str1 -lt $str2 ];then
            echo "$str1小于$str2"
    else
            echo "$str1大于$str2"
    fi

  • 相关阅读:
    解决原子性问题?脑海中有这个模型就可以了
    基础面试,为什么面试官总喜欢问String?
    学并发编程,透彻理解这三个核心是关键
    Spring Boot 统一异常这样处理和剖析,安否?
    每天用SpringBoot,还不懂RESTful API返回统一数据格式是怎么实现的?
    Java网络编程的Java流介绍
    Java设计模式学习记录-模板方法模式
    Java网络编程的基本网络概念
    Java设计模式学习记录-状态模式
    Java设计模式学习记录-观察者模式
  • 原文地址:https://www.cnblogs.com/hmm01031007/p/11397925.html
Copyright © 2011-2022 走看看