1. 程式人生 > >shell整理(29)===判斷用戶輸入可不可以作為變量

shell整理(29)===判斷用戶輸入可不可以作為變量

shell  心得   思考

(一)題目:

接受一個用戶輸入,判斷這個輸入是否可以作為變量

可以作為變量的條件

(1)大小寫字母都可以

(2)字母中間可以有數字,但是不能以數字開頭

(3)特殊字符除了“_ ”其他都不可以作為變量

例如:

[[email protected] hushuai]# bash 22.sh

Input:1dsf

Name is not

[[email protected] hushuai]# bash 22.sh

Input:=ewr

Name is not

[[email protected] hushuai]# bash 22.sh

Input:_

Name is ok

[[email protected] hushuai]# bash 22.sh

Input:_123

Name is ok

[[email protected] hushuai]#



shell 代碼如下:

版本1:

#!/bin/bash


read -p "Input:" a

b=`echo $a | sed -r ‘s/[a-zA-Z0-9_]/a/g‘|grep -o ‘a‘|wc -l`

c=${#a}

d=`echo $a |cut -c1`

echo $d | grep ‘[0-9]‘ &>/dev/null

if [ $? -eq 0 ];then

echo $a is not && exit 0

fi

if [ $c -eq $b ];then

echo $a is ok

else

echo $a is not

fi


版本一替換後還要統計個數,很麻煩,我們直接替換成空不就好了嗎?在版本(一)基礎上的修改

版本(二)

shell 代碼如下:

#!/bin/bash


read -p "Input:" a

d=`echo $a |cut -c1`

echo $d | grep ‘[0-9]‘ &>/dev/null

if [ $? -eq 0 ];then

echo $a is not && exit 0

fi


b=`echo $a | sed -r ‘s/[a-zA-Z_0-9]/ /g‘`

if [ -z $b ];then

echo $a is ok

else

echo $a is not

fi


這是一種方法因為寫了正則,所以比較簡單,其實我們還可以一個字母一個字母來比較

例如:版本(三)

shell代碼如下:

#!/bin/bash


read -p "Plz Input A name:" n

s=${#n}


start=`echo $n |cut -c1`

check=`echo $start | grep -c ‘[a-zA-Z_]‘`

if [ $check -ne 1 ];then

echo "Name not ok" && exit 1

fi


for i in `seq 2 $s`

do

xxoo=`echo $n |cut -c $i`

check=`echo $xxoo | grep -c ‘[a-zA-Z_0-9]‘`

if [ $check -ne 1 ];then

echo "Name not ok" && exit 1

fi

done

echo "Name is ok"

上面所有的一切只是提供一種思路和方法;一定要學會在一個問題上多研究研究,其實如果你知道一個命令的話還有另外一種方法

命令:eval

版本(四):

#!/bin/bash


read -p "Input:" n

eval $n=1 &>/dev/null


if [ $? -eq 0 ];then

echo "Name is ok"

else

echo "Name is not"

fi


本文出自 “IT生活” 博客,謝絕轉載!

shell整理(29)===判斷用戶輸入可不可以作為變量