前言

    正式开写

正文

一、需求模拟

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

为了安全,该软件在运行时不推荐使用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

 

尾声

posted on 2016-09-17 14:44  fatsnake  阅读(402)  评论(0编辑  收藏  举报