一个可以执行文件,可以实现某种功能 人:创建用户tom 计算机:useradd tom
规范Shell脚本的一般组成
? #! 环境声明,声明以下所有的代码有谁进行翻译 ? # 注释文本 ? 可执行代码
[[email protected] ~]# vim /root/hello.sh
#!/bin/bash
echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
[[email protected] ~]# /root/hello.sh
>:只收集前面命令的正确信息 2>:只收集前面命令的错误信息 &>:正确与错误都收集
[[email protected] ~]# echo 123 > /opt/1.txt
[[email protected] ~]# cat /opt/1.txt
[[email protected] ~]# cat /opt/1.txt /a
[[email protected] ~]# cat /opt/1.txt /a > /mnt/b.txt
[[email protected] ~]# cat /mnt/b.txt
[[email protected] ~]# cat /opt/1.txt /a 2> /mnt/b.txt
[[email protected] ~]# cat /mnt/b.txt
[[email protected] ~]# cat /opt/1.txt /a &> /mnt/b.txt
[[email protected] ~]# cat /mnt/b.txt
为了适应多变的需求与多变环境,所以使用变量 使用变量:会变化的量 类似于容器 以不变的名称,存储可以变化的值 变量名=存储的值 降低脚本运行难度,产生交互,获取到用户输入的内容 read -p ‘屏幕输出信息‘ 1.产生交互 2.记录用户在键盘上所有的输入 3.将用户在键盘上所有的输入,赋值给一个变量储存
? 设置变量时的注意事项
– 若指定的变量名已存在,相当于为此变量重新赋值 – 等号两边不要有空格 – 变量名只能由字母/数字/下划线组成,区分大小写 – 变量名不能以数字开头,不要使用关键字和特殊字符
查看/引用变量
? 基本格式 – 引用变量值:$变量名 – 查看变量值:echo $变量名、echo ${变量名}
[[email protected] ~]# a=rhel
[[email protected] ~]# echo $a
[[email protected] ~]# echo $a7
[[email protected] ~]# echo ${a}7
[[email protected] ~]# a=CentOS
[[email protected] ~]# echo ${a}7
补充: 单引号 ‘‘ : 取消所有特殊字符的意义
[[email protected] ~]# echo ‘‘
[[email protected] ~]# echo ‘* ? | ‘
-
? |
[[email protected] ~]# a=10
[[email protected] ~]# echo $a
10
[[email protected] ~]# echo ‘$a‘
$a
[[email protected] ~]#变量的种类
环境变量: 变量名一般都大写,用来设置用户/系统环境
由系统定义完成,并且赋值完成常见的环境变量: USER=存放当前系统登陆的用户名
[[email protected] ~]# echo $USER
root
[[email protected] ~]# su - dc
[[email protected] ~]$ echo $USER
dc
[[email protected] ~]$ exit
logout
[[email protected] ~]# su - student
[[email protected] ~]$ echo $USER
student
[[email protected] ~]$ exit
logout
[[email protected] ~]#
PATH=提供命令程序搜寻的路径
[[email protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] ~]# vim /opt/hello.sh
echo I love Dc
[[email protected] ~]# chmod +x /opt/hello.sh
[[email protected] ~]# /opt/hello.sh
I love Dc
[[email protected] ~]# hello.sh
bash: hello.sh: 未找到命令...
[[email protected] /]# cp /opt/hello.sh /usr/bin/
[[email protected] /]# hello.sh
位置变量:非交互式传递命令行参数 ? 在执行脚本时提供的命令行参数 – 表示为 $n,n为序号 – $1、$2、.. .. ${10}、${11}、.. ..
预定义变量
? 用来保存脚本程序的执行信息 – 直接使用这些变量 – 不能直接为这些变量赋值 $# 已加载的位置变量的个数,专门用于判断用户是否输入命令行参数 $? 程序退出后的状态值,0表示正常,其他值异常
[[email protected] ~]# vim /root/1.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#
[[email protected] ~]# /root/1.sh haha xixi hehe lele
[[email protected] ~]# vim /root/3.sh
#!/bin/bash
echo 您一共输入了$#个参数
[[email protected] ~]# chmod +x /root/3.sh
[[email protected] ~]# /root/3.sh
[[email protected] ~]# /root/3.sh hehe lele
条件测试及选择
条件测试 – [ 测试表达式 ] #每一部分之间都要有空格 常用的测试选项 ? 检查文件状态 -e:数据存在才为真 -d:数据存在,并且必须为目录才为真 -f:数据存在,并且必须为文件才为真
[[email protected] ~]# [ -f /etc/passwd ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ -d /etc/passwd ]
[[email protected] ~]# echo $?
1
[[email protected] ~]# [ -d /etc ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ -e /abc ]
[[email protected] ~]# echo $?
1
? 比较整数大小
-gt:大于 -ge:大于或等于 -eq:等于 -ne:不等于 -lt:小于 -le:小于或等于
[[email protected] ~]# [ 1 -eq 1 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 2 -ge 1 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 2 -ge 2 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 2 -gt 2 ]
[[email protected] ~]# echo $?
1
? 字符串比对
==:两个字符串一致为真 !=:两个字符串不一致为真
[[email protected] ~]# [ student == haha ]
[[email protected] ~]# echo $?
1
[ro[email protected] ~]# [ root == $USER ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ student != haha ]
[[email protected] ~]# echo $?
0
[[email protected] ~]#
if选择结构
if双分支处理
if [条件测试];then 命令序列xx else 命令序列yy fi
if多分支处理
if [条件测试1];then 命令序列xx elif [条件测试2];then 命令序列yy elif [条件测试3];then 命令序列hh else 命令序列zz fi
for循环结构,解决重复性的操作
? 遍历/列表式循环 – 根据变量的不同取值,重复执行xx处理 for 变量名 in 值列表 do 反复执行的代码
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。