Shell脚本编程——(不用判断循环语句)

来源:互联网 发布:二次开发有哪些软件 编辑:程序博客网 时间:2024/05/18 05:01

鉴于这道题太麻烦,我单独列出来写一篇

题目

:编写一个脚本/root/bin/createuser.sh,新建用户

要求:

1.脚本的执行语法必须是:createuser.sh -u username -m password,选项与参数间可支持多空格,但不能顺序颠倒。2.当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本。 3.用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅含字母数据和下划线" 4.当用户名检测合法后,判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出” 5.当用户名不存在,则创建用户,并为该用户设置所指定的密码后以正确输出方式显示“用户username已创建并更新密码” 6.要求脚本执行过程中不能有非要求的其他输出结果出现。脚本在非正确方式退出时应反回给?参数非0值。

(1)先来分析一下这道题的逻辑

这里写图片描述

(2)尽量减少语句嵌套

如果不用if或者case ;就会比较麻烦;需要减少逻辑判断的嵌套。那就可以把两个直接退出的判断单拎出来放到脚本执行的最前面。如果flase,直接退出。符合要求才向下执行接下来的脚本。

这里写图片描述

(3) 开始写脚本

语句一 :

 [ "$1" == "-u" -a  "$3" == "-m" ]  || ( echo createuser.sh -u username -m password;exit 1 )

为什么对格式判断只判断 -u 和-m

当在shell命令行输入时,会自动根据空格来区分脚本执行和各个位置变量,不用关心空格多少;根据题目要求把-u和-m 的顺序固定就好了。

语句二:

这里写图片描述

    上面那行是在命令行的测试    下面这行是要写在脚本里的代码    注意:[[]] 的判断只支持扩展正则表达式

语句3: (最麻烦的)
这里写图片描述

综合:
这里写图片描述

注意

    单大括号,{ cmd1;cmd2;cmd3;} 在当前shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后必须有分号, 第一条命令和左括号之间必须用空格隔开。    对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令。

注意: ()在使用时,若 (exit ),则退出的是(),而不是脚本所在的shell。

前方高能

终于把这道题做出来了。本来是打算用if 做的,可是又想挑战下;一边写着博客,一边自己做;折腾了半天。
只有最爱的 张艺兴 才能安慰我。

这里写图片描述

这里写图片描述

这里写图片描述

原创粉丝点击