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


    前言

        正式开写

    正文

    一、需求模拟

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

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

        

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

    2、创建后设置密码为123

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

     

     

    二、grep命令 搜索文件及文件中的内容

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

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

    1.格式

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

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

    grep '正则' 文件名

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

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

    2.常用参数

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

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

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

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

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

        

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

    三、stdin 非交互式输入 模拟键盘

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

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

    stdin 标准输入(键盘)

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

    四、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

     

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

    五、强大的标记(部分)

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

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

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

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

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

     

     

    六、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

     

    尾声

    在人生中,赢家并不是那些有优秀基因的人,或是那些最有天分的人,而是那些最不屈不挠的人!当他们跌倒了,他们总是不断的爬起来,继续做,继续做。 no pain no gains (^ _ ^) !!
  • 相关阅读:
    hibernate -inverse
    C3p0实践
    Python3数据结构
    UDP组播
    UDP广播
    线程池代码
    UDP服务器
    epoll反应堆模型代码
    epoll事件模型
    epoll函数
  • 原文地址:https://www.cnblogs.com/fatsnake/p/5878794.html
Copyright © 2020-2023  润新知