马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
面试常考:
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
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |