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 做的,可是又想挑战下;一边写着博客,一边自己做;折腾了半天。
只有最爱的 张艺兴 才能安慰我。
阅读全文
1 0
- Shell脚本编程——(不用判断循环语句)
- shell 脚本编程之循环语句
- shell脚本编程之循环语句
- shell编程之循环与判断语句
- linux之基础shell脚本编程2 if语句循环判断
- shell编程——循环语句
- shell编程——循环语句
- shell编程——循环语句
- shell脚本-循环语句
- Linux shell脚本编程入门(二) 循环语句
- Linux shell脚本编程if语句的使用方法(条件判断)
- linux shell脚本编程if语句内判断参数详解
- Shell脚本学习(二):条件语句与循环语句
- Shell 编程6(循环语句for)
- Shell 编程7(循环语句while)
- Shell 编程8(循环语句until)
- Linux学习之shell脚本——条件语句与循环语句
- Linux的shell编程——判断语句
- java存储模型与C语言存储模型(二)
- php 随笔
- udp如何实现可靠性传输?
- I/O流学习
- 我的减肥减脂计划
- Shell脚本编程——(不用判断循环语句)
- Java实现敏感词过滤
- 常见类---Arrays类
- TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制??
- I/O:读和写
- redhat忘记root密码的解决方法
- 设计模式之组合模式
- 这里没有key
- hdu 4366(线段树+DFS序)