目的
通过真实案例完成shell脚本入门
什么壳?
可以在Linux上运行的脚本; 可以减少运维能力,使用脚本完成一系列重复性任务;
今天我就用一个实际案例源码来讲解一下。 这个源码是我实际工作中使用的;
案例要求
场景:我们搭建了一台smba服务器,需要给新用户分配账号和权限,而我们的smba服务器采用的是tdbsam模式;
创建用户所需的过程是:
1.创建系统用户
2. 将用户添加到其他组
3.创建smba账户
5.修复配置文件
6. 重新加载smba配置
看着就麻烦。 如果没有新人进来的话,再重复一遍会很累,所以需要手动执行一个脚本。
shell脚本学习
shell脚本基本上是这样的
#!/bin/sh
#
# 这是创建smba用户创建
# 作者:灵猫说技术
#
#用户岗位
ganwei=(设计岗位 摄影岗位 技术岗位 编辑岗位 AE岗位 管理岗位)
#用户附加组
all_user_group=(kfwui kfwvideo kfwTech kfwEdit kfwAE kfwmg)
echo '本程序创建smba用户...'
echo '--------------------------------'
read -p '请输入用户登录名:' user_name
read -p '输入中文名称:' name
echo "你输入的用户名为:$name"
第一行:#!/bin/sh表示用哪个程序来执行这个脚本,#表示注释
Shell 字段:以空格分隔,无逗号
#用户岗位
ganwei=(设计岗位 摄影岗位 技术岗位 编辑岗位 AE岗位 管理岗位)
#用户附加组
all_user_group=(kfwui kfwvideo kfwTech kfwEdit kfwAE kfwmg)
代码说明:
1. 两个字段的定义如上。 数组中的[value]以空格分隔。 相应的字符串不应有冒号(无论是单冒号还是双冒号)。 除非你的字符有空格,否则建议你不要这样做;
可变参数:等号前后不能有空格
上面的代码解释了一切。 被赋值变量的“=”号前后不能有空格,否则会导致Linux版本的规则出现问题; 下面的代码是错误的;
index = 1
阐明:
变量定义直接采用这种格式:变量=值。 【变量】不能有特殊字符,且第一个字符不能是数值;
单冒号和双引号:纯字符使用单冒号,变量使用双引号。
使用echo在屏幕上输出一段内容
echo '本程序创建smba用户...'
echo "本程序创建smba用户..."
echo "你输入的用户名为:$name"
阐明:
1、上述代码中不会出现单冒号或双冒号的句型错误;
2、上面代码的第三行,有一个变量$name。 可以通过两种方式将变量放置在字符逗号中;
格式:“${变量名}”,这个适合任何类型
B格式:$变量名,这只适用于非对象(数组)变量
user_group="${all_user_group[index-1]}"
echo "你输入的用户名为:$name"
提示用户输入
直接上传代码
read -p '请输入用户登录名:' user_name
read -p '输入中文名称:' name
格式:
read -p 输入提示内容变量
变量=用户输入
条件判断:方括号和单个空格
if fi 的两个值是相反的,很容易记住。 最困难的是条件。 很多人被困在这里。
echo "下面都很关键,不可以任意中断....."
read -p "如果确认没有问题,请输入[yes]:" isok
if [ $isok == "yes" ]
then
echo 'check ok'
else
echo '程序退出'
exit 0
fi
阐明:
1.条件必须包含在[]中E语言手游脚本源码,但是这里的[空格]很重要,就是方括号两边必须有一个空格,一个空格,还有一个空格,否则会出现奇怪的错误不同版本的Linux;
2.代码块问题:没有“;” 语句末尾的分号,或其他地方。
我们先来说说“;”的作用
1、空句:表示这个地方什么都没有:“;;”
2.用于句末的分隔。
if [[ ! $user_name =~ ^[a-Z]+$ ]];then
echo '输入的用户名无效...'
exit
fi
上面的代码检查输入的用户名中是否有特殊字符,但是有一个“;” 方括号旁边,用于代码分隔。 当然,你也可以不使用“;”按回车换行。
命令函数输出参数问题
date_time=`date "+%Y-%m-%d %H:%M:%S"`
上面获取当前时间并将形参赋予变量date_time,用这个“`”来匹配
如何输入具有多个值的形式参数
echo -e "$user_passwdn$user_passwd" | pdbedit -t -a $user_name
这行代码也很有趣。 首先要解释的是echo -eE语言手游脚本源码,然后管道符合
pdbedit -t -a username 可以在smba中添加帐户
-t:表示获取输入标准中的输入值;
-a:表示添加用户信息
但这里需要输入两次用户密码; 所以有 echo -e "$user_passwdn$user_passwd"
关键是“n”换行符; 相当于两个输出; 然后使用管道符号将输出转换为pdbedit的输入;
相当于给pdbedit分配了两个参数;
在配置文件中添加配置
echo '开始向配置文件添加一个节点...'
echo "[$name]">>/etc/samba/conf/homes.share
echo "comment = $name">>/etc/samba/conf/homes.share
echo "path = /kfwnas/$name">>/etc/samba/conf/homes.share
echo "browseable = yes">>/etc/samba/conf/homes.share
echo "writable = yes">>/etc/samba/conf/homes.share
echo "read only = yes">>/etc/samba/conf/homes.share
echo "admin users = $user_name">>/etc/samba/conf/homes.share
echo "valid users = $user_name,@$user_group">>/etc/samba/conf/homes.share
echo "write list = $user_name">>/etc/samba/conf/homes.share
echo "public = no">>/etc/samba/conf/homes.share
echo "create mask = 0720">>/etc/samba/conf/homes.share
echo "directory mode = 0720">>/etc/samba/conf/homes.share
双箭头和单箭头说明
>>:表示您想要将信息[附加]到文件中。 该信息位于文件末尾。
>:表示找到信息并截断,例如:t.txt内容如下,我使用cat t.txt
这个是灵猫说技术
今天我在这里很高兴
开始截断吧
我是灵猫爱好技术20年
执行以下语句
echo "开始截断吧">>/ljw/t.txt
cat t.txt # 再次看文文本内容,以下为当前文本内容
开始截断吧
我是灵猫爱好技术20年
完整代码请关注我并阅读他的文章【自动化脚本完成smba用户添加脚本源码】
可以发完整代码给我或者私信我,谢谢!
我是一只聊科技的果子狸