1、shell脚本是什么?
脚本是由一系列的shell命令组合起来,并且加入一定的控制语句之后形成的一个文本,就可以称为脚本。脚本最大的优点就是可以去代替人工去重复的执行某件事情。当执行脚本的时候,shell解释器就会逐行去翻译命令,并将结果提交给内核,内核接收到结果之后,就会去驱动硬件进行响应,因此脚本就是一门解释型的语言,本质是多条shell命令的有序集合(可能会加入一定量的控制结构语句)。
2、脚本的编写格式及步骤
1)创建一个.sh文件(后缀为.sh的文件一般就是shell脚本文件)
2)打开.sh文件(vim编辑),首行输入引用 #! /bin/bash(相当于引用bash为内核来解释你编写的脚本)
4)编写完成后保存,并且给.sh文件加可执行权限(chmod u+x 文件名.sh)
3、脚本的语法
1)脚本中变量的定义:脚本中的所有数据类型称为“弱类型”,及在脚本编写过程中,所有的变量没有数据类型的区分。
引用: &{变量名} 或 &变量名 (带大括号比较安全,不带大括号的话如果变量后还有字符,则会不识别变量,会认为是个新的变量名,建议带大括号,这样不容易出错)
3)位置变量
#! /bin/bash
#位置变量为 $N(N是数字,从0开始)
echo $1
4)系统预定义变量
概念:系统之前规定将$符号和指定的另外一个字母两者相结合,之后具备一定的含义。
$#:统计命令行参数的个数(有效参数的个数,不包含可执行文件的名字,及不包含上方中的$0,从下一个有效的参数开始,执行语句默认无效)
$?:获取上一条命令的退出状态:状态数值不是0就是1(0代表上一条命令时成功执行,反之为失败执行)
5)环境变量
操作:
export 变量名=值 (可以一次性赋值多个,多个数值之间以冒号隔开)
export 变量名=新值:${变量名} (想在旧变量之前加参数)
export 变量名=${变量名} :新值 (想在旧变量之后加参数)
unset 变量名
4、脚本的语句
1)说明性语句
2)功能性语句
2-1动态获取变量的值
命令:read,读取键盘输入的值,功能类似于C语言中的scanf函数的功能
方式:
read 变量名1 变量名2 。。。 变量名 (若变量未定义,则默认定义新变量且赋初值)
#! /bin/bash
#方法一
echo "请输入二个值:"
read NUM1 NUM2
#方法二
read -p "请输入两个值" NUM3 NUM4
2-2通配符的转义
1、软转义
在这块即了解双引号加与不加的区别,在大多时候,两者其实没有多大的区别,但是又不完全相同,举例如下
#! /bin/bash
#举例1
echo "河流 77"
#举例2
echo 河流 77
举例一的输出结果即为 河流 77
举例二的输出结果即为 河流 77
若不加双引号则会将多个空格缩减为一个空格,反之则会将空格原样输出
2、硬转义
单引号 与 ”“ 称为硬转义,在打印输出时,硬转义符号遇到变量${变量名}或者命令时,不会去把他们当作变量和命令。而是当作一个字符串去输出。
2-3 expr算术运算命令
expr 变量名1 运算符 变量名2(其中每个字段之间至少需要保留一个空格)
2-4测试命令test
1、[(空格)对象一 测试条件 对象二(空格)] (中括号和两个对象之间必须至少有一个空格)
1、对于整型的测试(测试对象假设为${num1} 、${num2})
#! /bin/bash
#等于
test ${num1} -eq ${num2}
#不等于
test ${num1} -ne ${num2}
#大于
test ${num1} -gt ${num2}
#大于等于
test ${num1} -ge ${num2}
#小于
test ${num1} -lt ${num2}
#小于等于
test ${num1} -le ${num2}
2、对于字符串的测试(测试对象假设为${str1} 、${str2})
#! /bin/bash
#等于
[ ${str1} = ${str2} ]
#不等于
[ ${str1} != ${str2} ]
#字符串长度为0
[ -z ${str1} ]
#字符串长度不为0
[ -n ${str2} ]
3、对于文件属性的测试(测试对象假设为${f1} 、${f2})
#! /bin/bash
#-f :测试对象是否存在且为普通文件
[ -f ${f1} ]
#-d :测试对象是否存在且为目录文件
[ -d ${f1} ]
#-L :测试对象是否存在且为软链接文件(符号链接文件)
[ -L ${f1} ]
#-r:测试对象是否存在且具备可读权限
[ -r ${f1} ]
#-w:测试对象是否存在且具备可写权限
[ -w ${f1} ]
#-x:测试对象是否存在且具备可执行权限
[ -x ${f1} ]
#-s:测试对象的大小
[ -s ${f1} ]
#f1 -nt f2:测试f1是否比f2更新(文件最后一次保存的时间)
[ f1 -nt f2 ]
#f1 -ot f2:测试f1是否比f2更旧(文件最后一次保存的时间)
test f1 -ot f2
5、结构性语句
1、选择结构
(1)if语句
#if语句的使用
#if多路分支
if 测试语句
then
命令表
elif 测试语句
then
命令表
else
命令表
fi
(2)case语句
#case的使用
case 变量值 in
模式1)
命令表
;;
模式2)
命令表
;;
模式3)
命令表
;;
*)
命令表
esac
6、循环结构
#sehll风格
for 变量名 in 参数列表
do
命令1
命令2
...
命令N
done
#类似C风格
for(i = 0 ; i< 10 ; i++)
{
命令表
}
#while循环的使用
while 条件判断
do
命令表
done
#while死循环
while [ true ]
do
命令表
done
原文地址:https://blog.csdn.net/u011574457/article/details/130016943
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_33042.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!