用户云卷云舒 发表于 2024-11-19 13:01:50

RHCE的练习(13)

面试常考:

1、判定输入是否是数字

#(1)grep过滤判断是否是字符串
read -p "请输入:" str
echo $str | egrep'^+$'
[ $? -eq 0 ] && echo "您输入的是字符串" || echo "输入的不是字符串"
#(2)字符串运算 =~   A=~B 子串A是否包含子串B
[[ "$str" =~ * ]] && echo "2您输入的是字符串" || echo "2输入的不是字符串"
#(3)利用通配符,判断指定输入字符是否在字符串中包含
[[ $str = ** ]] && echo 包含字符 ||echo 不包含
#(4)利用case语句
case $str in
      **)
      echo 是字符串
      ;;
      * )
      echo 不是字符串类型
      ;;
esac
#(5)通过算术运算
expr $str "+" &>/dev/null
[ $? -eq 0 ] && echo 输入的是数字 || echo 输入的是字符
(6)a=1234;echo "$a"|[ -n "`sed -n '/^*$/p'`" ] && echo string a is numbers
if [ -n "$(echo $1| sed -n "/^\+$/p")" ];then
    echo "$1 is number."
else
    echo 'no.'
fi


# num10=123
# num20=ssss1114ss
# [[ "$num10" =~ ^+$ ]];echo $?
0
# [[ "$num20" =~ ^+$ ]];echo $?
1
2、判定输入的字符是否为整数

## 方法1
                a=1234;echo "$a"|[ -n "`sed -n '/^*$/p'`" ] && echo string a is numbers
                  第一个-n是shell的测试标志,对后面的串"`sed -n '/^*$/p'`" 进行测试,
         如果非空,则结果为真。
                   sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要
         的内容:即后面的表达式所匹配的行,这是通过表达式中加入“p”命令来实现的。
                  /^*$/他的含义是匹配至少由一位数字构成的行
                       
## 方法2, 可以,不过不是bash实现的,是使用了grep的正则 -->grep的正则表达式,<<< 就是将后面的内容作为前面命令的标准输入
                #if grep '^[[:digit:]]*$' <<< "$1";then
                #echo "$1 is number."
                #else
                #echo 'no.'
                #fi        

## 方法3
                #if [ "$1" -gt 0 ] 2>/dev/null ;then
                #echo "$1 is number."
                #else
                #echo 'no.'
                #fi

## 方法4,case
                #case "$1" in
                #*)
                #    echo "$1 is number."
                #    ;;
                #*)
                #    ;;
                #esac

## 方法5,awk
                #echo $1| awk '{print($0~/^[-]?()+[.]?()+$/)?"number":"string"}'
               

## 方法6,expr
                expr $1 "+" 10 &> /dev/null
                if [ $? -eq 0 ];then
                  echo "$1 is number"
                else
                  echo "$1 not number"
                fi

3、如果在/home/pushmail目次下不存在leadtone目次,则创建该目次

    path=/home/pushmail/leadtone
    [ -d $path ] || mkdir -p $path
    或 [ ! -d $path ] && mkdir -p $path
    
4、判定数字大于500则执行big.sh 小于等于500则退出脚本,并输出报错信息exit 

read -p "please input num: " n
[ $n -gt 500 ] && echo "big.sh" || (echo "小于等于500";exit 3)  ----()用于复合指令

5、判定当前系统的语言环境,若不是“en_US”时输出提示信息“Not en_US”。

    分析:1)如何获取当前系统语言环境--> LANG
            lang=$LANG
            # echo $lang
            zh_CN.utf8
            文件:/etc/locale.conf
        2)处理字符串
      方法1:echo $lang | cut -d. -f1
      方法2:echo $lang | awk -F. '{print $1}'
      方法3: lang=${LANG%.*} echo $lang
      lang=$(echo $LANG | cut -d. -f1)
      [ "$lang" = "en_US" ] || echo "Not en.US"
      或[ "$lang" != "en_US" ] && echo "Not en.US"
      # echo $lang
      zh_CN.utf8    
6、用Shell编程,判定一文件是不是目次文件,如果是将其拷贝到 /dev 目次下

​    分析:-c 判断是否是字符设备文件
cp -i
​    [ $# -ne 1 ] && (echo "no input file...";exit 4)
​    [ -c "$1" ] && \cp $1 /dev
7、通过ping百度来测试是否能上网

分析:通过命令的返回值来判断ping -i 5 localhost 每隔五秒显示
    ping -c 2  www.baidu.com &>/dev/null   &&  echo  up || echo down
    [ $? -eq 0 ] && echo "net is up..."
8、写一个shell脚本来看看你利用最多的命令是哪些,列出你最常用的命令top10

分析:命令保存文件 /root/.bash_history
        # sort /root/.bash_history | uniq -c | sort -nr | head
        # history | tr -s" "| cut -d " " -f 3- | sort| uniq -c | sort -rn| head


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: RHCE的练习(13)