linux(四)脚本基础

1.shell和shell script

shell是解释器,shell script是脚本

2.本博客以bash(bourne again shell)为主要研究版本

3.查看当前shell解释器版本
echo $SHELL
ls -al 'which sh'

 4.创建一个脚本

直接传入脚本

 

 尝试调用脚本

 发现问题

 解决问题

在上面的示例中,我们知道有两种方式让脚本运行起来
1.直接使用 解释器+脚本名
这样相当于将脚本当作参数传入解释器,不需要操作当前脚本的用户必须拥有执行权限
2.使用./脚本名
这样的调用需要该用户有对该脚本的执行权限

脚本的第一句通常都是指定执行该脚本的解释器版本,默认是bash
#!/bin/bash
当用第一种方法去执行脚本时,由于在调用时就已经指定的解释器的版本,所以脚本内部的这句代码已经不重要了
当用第二种方法去执行脚本时,会首先查看是否指定解释该脚本的解释器版本
如果没有,则默认使用bash

所以需要对文件查看权限并在需要的时候赋权

补:用source filename
不需要执行权限

5.脚本注释

单行注释:#

多行注释:

:<<EOF

...

EOF

6.脚本基础

1.定义变量 :和大部分编程语言规则一样
但在命令/脚本中 不能随意写空格
2.引用变量 $变量名 {}可以分清变量界限
3.单、双引号;字符串可以用单、双引号,也可以不用单引号
单引号:不能识别变量,不能出现转义字符,会全部当作字符串
双引号:可以识别变量,可以出现转移字符
4.删除变量:unset unset不能删除制度变量 (readonly)

7.脚本常用命令

read命令从标准输入流中读取一行,并把输入的每个字段传给shell变量
read -p "提示内容"

编写脚本:

 运行脚本:

printf命令:printf不会自动换行需要手动加\n;printf比echo移植性好
printf可以格式化字符串、限制字符串输出的格式、长度、对齐方式
格式控制有:
%d:decimal 必须是是十进制整数
%s:字符串
%f:浮点数
%c:字符型

如图所示:printf的使用格式:printf format-string [arguments]

printf "format \n" 参数 其中 format \n 就是格式

format表示:1.用什么类型的格式控制

                     --2.是否左对齐?默认右对齐(一般不考虑)

                     3.是否需要换行

当使用%f时.可以指定小数位数,可以看到默认的f是6位小数,通过.3f来设置只有3位小数

 也可以使用%d、%s、%o、%x、%c

分不清8进制和16进制?没关系,变大的就是8进制 变小的就是16进制

 其余格式控制符号自行尝试

这里要说明 格式重用:

8.shell变量

局部变量:局部变量在shell内部定义执行,只在当前脚本中生效,外部无法调用
环境变量:$path,环境变量可以保证一些程序的正确运行
shell变量:shell设置的特殊变量,可以保证shell的正常运行

查看环境变量:

 变量涉及到许多:

以上内容中,变量与单双引号以及花括号&&字符串变量的截取 是本篇文章的重点,其余内容可自行查阅


变量的定义及其简单,直接a=1,就完成了定义和赋值
删除变量:unset a


单引号'$a'会将其引号的内容当作一个字符串而不是a的值
双引号则不会
花括号可以让变量分清界限:${a}

只读变量: readonly a 
变量是可以被再赋值的,但只读变量不可以

获取变量长度: str="hello world"  echo ${#str} 即可获取

字符串变量的截取:
假设现在有字符串 str="http://www.test.com/123"
${str:star:end}:从左边开始,从star位置开始截取,到end位置
${str:star}:从左边开始,从star位置开始截取,一直到字符串最后一位
${str:0-star:number}:从右边开始,从0到star的长度,往回截number个
${str:0-star}:从右边开始,从0到star的长度,一直到字符串最后一位

9.shell参数传递

shell参数传递也比较重要,我会在脚本中实例化,主要参数类型:

$0: 程序名称

$1-9: 程序的第1-9个变变量

$n:程序的第n个变量

$#:程序一共有几个变量
$*:程序的所有参数

$@:和$#类似,但在加引号时不同

$?:指上个程序的程序是否执行正确.默认是0.如果不是0则说明程序有bug或者warning,需要注意的是在linux中,有时候写错了不会报错,这样会误导.

创建脚本:test.sh

实例化:

 接下来看$*和$@的区别:

10.类型转换

let

 在使用let可以让表达式不再从左往右执行,相同的有:decalre -i 和$(())

11.日期类型

日期类型格式: date "+"

其中年时分秒分别都是大写标识:%Y %H %M %S

月日为小写标识:%m %d

建议书写格式:在连接时年月日用-   时分秒用:

 

 

12.条件表达式判断

test、[ ]、[ [ ] ]、(())

以上表达式判断的方法只需要会一种就可以

一般都是用[]

注意空格

13.关系运算符、布尔运算符、字符串运算符、文件测试运算符

关系运算符:eq、ne、gt、lt、ge、le

布尔运算符:-o 或 -a 与 !非

文件测试运算符:-z 判断字符串是否长度为0 若为0则返回T

-n判断字符串是否长度为0 若不为0则返回T

文件测试运算符:检测是不是块文件设备,是不是普通文件,是不是普通目录,...

这里记住-d file(是不是目录)和-f file和-e file(是不是普通文件)(文件是否存在)就行,其他的用的时候再查

一共13个

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值