首页 > 代码库 > 17.创建用户之grep命令及强大的$

17.创建用户之grep命令及强大的$

前言

????正式开写

正文

  1. 需求模拟

譬如某一天我们做了一个很屌的软件。

为了安全,该软件在运行时不推荐使用ROOT账户运行。所以我们会有个初始化shell脚本,来创建用户和初始化文件

????

1、判断用户是否存在(譬如叫god),没有则创建

2、创建后设置密码为123

3、把一些程序文件拷贝过去,并且除了root外,只能god用户运行(最好是root也不能方便的运行)

?

?

  1. grep命令 搜索文件及文件中的内容

强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

这也是日常维护和系统部署时,用的最多的一个命令。

????1.格式

grep "你要检索的字符串" 文件名

grep "你要检索的字符串" 文件名*

grep ‘正则‘ 文件名

cat 文件名 | grep "你喜欢的字符串"

ls | grep "你喜欢的文件名"

????2.常用参数

????-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

????

例如: cat /etc/passwd | grep ‘^pangzi‘ -c

  1. stdin 非交互式输入 模拟键盘

使用passwd 修改密码需要提示和确认 如果我们强迫设置可以吗?

echo "123" | passwd 用户名 --stdin

stdin 标准输入(键盘)

--stdin 代表使用非交互模式 输入,前面一条语句是管道

  1. shell1

    USER_COUNT=`cat /etc/passwd | grep ‘^god:‘ -c`

    USER_NAME=‘god‘

    if [ $USER_COUNT -ne 1 ]

    then

    ????useradd $USER_NAME

    ????echo "123" | passwd $USER_NAME --stdin

    else

    ????echo ‘ok‘

    fi

    ?

    缺点:用户不能反复创建及修改密码

  2. 强大的标记(部分)

    $#传递到脚本的参数个数

    $$脚本运行的当前进程ID号

    $!后台运行的最后一个进程的进程ID号

    $@与$#相同,但是使用时加引号,并在引号中返回每个参数

    $?显示最后命令的退出状态。0表示没有错误,其它任何值表明有错误(或执行不成功)

    ?

    ?

  3. shell2 优化可重复执行

    USER_COUNT=`cat /etc/passwd | grep ‘^god:‘ -c`

    USER_NAME=‘god‘

    ?

    useradd $USER_NAME

    if [ $? -eq 0 ] #判断上一个命令的执行状态,0是失败

    then

    echo "123" | passwd $USER_NAME --stdin

    echo "done"

    else

    echo "error"

    fi

    ?

尾声

17.创建用户之grep命令及强大的$