RHCE的练习(13)

面试常考:

1、判断输入是否是数字

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


[root@localhost ~]# num10=123
[root@localhost ~]# num20=ssss1114ss
[root@localhost ~]# [[ "$num10" =~ ^[0-9]+$ ]];echo $?
0
[root@localhost ~]# [[ "$num20" =~ ^[0-9]+$ ]];echo $?
1

2、判断输入的字符是否为整数

## 方法1
		a=1234;echo "$a"|[ -n "`sed -n '/^[0-9]*$/p'`" ] && echo string a is numbers
		  第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,
           如果非空,则结果为真。
		   sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要
           的内容:即后面的表达式所匹配的行,这是通过表达式中加入“p”命令来实现的。
		  /^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行
			
## 方法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 
		#  [1-9][0-9]*)  
		#    echo "$1 is number." 
		#    ;; 
		#  *)  
		#    ;; 
		#esac 

## 方法5,awk 
		#echo $1| awk '{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?"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
	[root@localhost 桌面]# history | tr -s  " "| cut -d " " -f 3- | sort  | uniq -c | sort -rn  | head

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值