什么是shell?
1 | shell, 即命令解释器.由命令、变量和流程控制语句有机的结合 |
1 | echo "df -h" |
脚本统一目录:mkdir -p /server/scripts
1 | $ vim oldboyedu.sh |
1 | 脚本添加版权信息 |
1 | 执行脚本 |
定义全局变量
1 | export OLDBOY=1 注:变量建议大写 |
取消全局变量
1 | unset OLDBOY 取消全局变量 |
变量定义要求
1 | 变量以字母开头,可以存在下划线。但不包括特殊字符 |
单引号与双引号区别
1 | 单引号:所见即所得 |
特殊变量
1 | 位置变量 |
1 | 位置变量-测试环境 |
1 | 进程状态变量 |
变量的定义
1 | 1. 直接赋值 例:Dir=/var/log |
写个atm程序
1 | 要求:让你输入你的银行卡账号和密码,然后在屏幕上打印你的输入结果。 |
文件类型-判断
1 | 示例: |
1 | “字符串1” = “字符串2” 若字符串1等于字符串2则为真,可以使用“==”代替“=” |
按照文件类型进行判断
测试选项 | 作用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) |
-d 文件 | 判断该文件是否存在,并且是否为目录(是目录为真) |
-e 文件 | 判断该文件是否存在(存在为真) |
-f 文件 | 判断该文件是否存在,并且是否为普通文件(是普通文件为真) |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真) |
-p 文件 | 判断该文件是否存在,并且是否为管道文件(是管道文件为真) |
-s 文件 | 判断该文件是否存在,并且是否为非空(非空为真) |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真) |
判断整数
1 | -eq 等于equal |
Bash中的“[[]]”与“[]”的区别
1 | "[[]]" 是“[]”的提高版本,但“[[]]”仅在Bash、Zsh和Korn Shell中可用,而“[]”几乎可以在任一种shell下使用。不过,像我们老版本的Gentoo都支持bash,所以还是建议使用双中括号的,了解以下区别即可。 |
if语句
1 | --单分支条件语句: 一个条件一个结果,可以使用单分支if语句 |
传参方式-if语句判断-实例1:
1 | #!/bin/bash |
读入赋值方式-if语句判断-实例2:
1 | #!/bin/bash |
读入赋值方式-if语句判断-实例2-if判断优化版:
1 | [root@root scripts]# vim checkpasswd.sh |
嵌套的if/else语句-实例
1 | 定义整型变量命令: declare -i |
1 | [root@root scripts]# vim qiantao.sh |
多条件、多级的if/else语句-实例
1 | #!/bin/bash |
case语句
1 | [root@oldboy202 scripts]# vim case.sh |
for循环语句
1 | cd /tmp |
1 | for i in {1..10};do echo "这是"$i;done |
案例-测试
1 | 要求: |
for循环练习1:批量创建10个用户,设置并显示用户随机密码
1 | vim useradd.sh |
for循环练习2:打印操作系统名称
1 | #!/bin/bash |
for循环案例3:如果文件存在,则打印此文件,否则打印一个错误信息。
1 | vim file_check.conf |
for 循环案例4:使用命令替换的for循环实例
1 | [root@oldboy202 ~]# vim change.sh |
案例5:for语句倒计时脚本-生成序列
1 | 预备知识: |
while语句(又称死循环)
1 | 善于执行守护进程,以及我们希望循环不退出持续执行。 |
技巧:sh -x 参数会把脚本的执行过程也会显示出来,如:
1 | [root@oldboy202 scripts]# sh -x start.sh |
注:windows换行符是\r\n ,而linux换行符是\n。这样的话,win机器上编写的脚本上传到Linux执行后会报错。
解决方法1:yum install -y dos2unix && dos2unix win.sh
解决方法2:将nodepad++转换为Unix格式
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/07/15/老男孩-day12-shell编程/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!