linux练习——查询系统中是否存在该用户,若有打印用户存在,若不存在添加该用户

要求用户输入一个用户名,查询系统中是否存在该用户,若有打印用户存在,若不存在添加该用户

方法1
##创建shell文件

vim shell.sh

##读取命令:-p 参数,在read命令行中直接指定一个提示,即在输入前打印提示信息

read -p "please input a username:" MYUSER

##if...then...fi句型
##设置:为切割符,-f表示第几列,这里取第一列
##  | :通道符,上一条命令的输出,作为下一条命令参数
if cut -d: -f1 |grep "^$MYUSER$" /etc/passwd &>/dev/null
then
MYSHELL=`grep "^MYUSER" /etc/passwd | cut -d: -f7 `
#echo:打印变量的值或者给定的字符串
echo "${MYUSER}'s shell is $MYSHELL"
else
echo "$MYUSER is not exist"
fi

read指令用法:

-a :变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d :标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p :提示信息,即在输入前打印提示信息。
-e :在输入的时候可以使用命令补全功能。
-n :数字,定义输入文本的长度,很实用。
-r :屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s :安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t :秒数,定义输入字符的等待时间。
-u :跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

cut指令用法:

-b :以字节(bytes)为单位进行分割。
-c :以字符(characters)为单位进行分割。
-d :自定义分隔符(delimiter),默认为制表符。
-f :与-d一起使用,按d指定的分隔符分割后,指定显示哪个区域(fields)。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除。
–complement :补充选定的内容,即反选。

例如:

cut -d '/' -f3 logs.txt    #设置/为切割符,-f 表示第几列,这里取第三列

linux中的&&,|| 命令

&&:前一命令执成功(返回0)下一命令才会执行。如 date && echo 1 会打印1,而data && echo 2不会打印2

||:如果||左边的执行失败(返回1),就执行&&右边的。

grep命令

-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
–color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context

方法2:
#!/bin/sh  
#定义函数 
 
search(){  
#判断输入值是否为空,如果为空,则函数结束,返回值1  
# !非  -z 在if里的意思是 空  $1 第一个参数
[ -z $1 ] && return 1  

#判断用户是否存在,存在则显示要求,不存在,函数结束,返回值1  
if id $1 &> /dev/null 
then 
    echo "$1 UID is `id -u $1`"
    echo "$1 Shell is `grep "^$1:" /etc/passwd \
    |cut -d':' -f7 `"  
else
    return 1  
fi  
}  
#循环执行,以符合题目要求  
while :;do
read -p "Please input A username[quit to exit]: " User 
    if [ $User = quit ];then 
        exit 0  
    else
        search $User 
        Res=$?  
        [ $Res -eq 1 ] && echo "No such $User."
    fi  
done

shell脚本开头 #!/bin/sh

目前研发送测的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/bin/bash

字符串变量表达式

If [ $a = $b ] :如果string1等于string2,则为真。字符串允许使用赋值号做等号
if [ $string1 != $string2 ] :如果string1不等于string2,则为真
if [ -n $string ] :如果string 非空(非0),返回0(true)
if [ -z $string ] : 如果string 为空,则为真
if [ $sting ] :如果string 非空,返回0 (和-n类似)

你可能感兴趣的:(嵌入式)