Linux shell脚本编程规范与变量

shell的编程规范与变量:

什么是shell:

shell的作用:

1.把人类的语言转换成计算机的二进制,由计算机内核处理,二进制转换成人类能识别的语言。

Shell就是命令解释器-------->翻译官

linux系统中的shell种类:

bash、tcsh、csh

bash(/bin/bash):linux默认的shell(解释器)

tcsh:整合了csh的功能,可以提供比csh更强大的功能

csh:类似c语言的shell

nologin:也是shell的一种类型。禁止用户登录

如何查看当前系统自带的shell

cat /etc/shells
在这里插入图片描述
查看用户的登录默认shell

cat /etc/passwd
在这里插入图片描述
除非指定,默认shell都是bash

什么是脚本?

脚本语言就是扩建语言,也可以理解为动态语言,也是一种编程语言,是一种控制软件应用程序,就脚本都是以文本形式保存。只在调用时候才进行解释或者编译。

脚本语言的特点:是按行执行的。

shell脚本的构成:

小提醒:在linux中新建第三方东西一般放在opt目录,防止出问题

shell脚本由三类构成:

第一类:开头 注明解释器 #!/bin/bash (默认/bin/bash可以省略,其余别的编译器一定要注明)

第二类:执行语句,都要是系统支持的命令格式。只要是系统能够执行的语句(包括第三方的扩展命令)都可以作为执行语句。

第三类:注释语句 以# 作为注释,注释的代码将不会被执行。
举例:在/opt目录下创建一个脚本
在这里插入图片描述
脚本执行的三种方式:

第一种:不需要赋予执行权限就可以执行:

1.sh
在这里插入图片描述
2.source(执行脚本后直接进入脚本文件所执行命令所在位置)
在这里插入图片描述
source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令,是Linux系统自带的。

读取文件当中的可执行命令,然后会加载到shell中,不用重启,直接 生效

第二种:赋权执行

先赋予执行权限

chmod +x 或者chomd 777

然后:

./相对路径执行 .当前目录(./first.sh)
/opt/first.sh :绝对路径
在这里插入图片描述
赋权执行是生产当中常用的方式,sh和source只限于调试阶段。

都是以绝对路径来执行的

脚本一般都是和定时任务(crontab -e)来执行的,要写绝对路径

重定向
交互式硬件设备
类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器

重定向操作:

重定向输出(符号>):把指定结果保存在文件中,覆盖原有的内容。

例如:echo 123 >111.txt :将123保存在111.txt中

重定向输入(符号<):从指定文件中读取数据,也可以理解为免交户。

例如:passwd --stdin my <111.txt:从111.txt文件中提取数据,作为my修改的密码)

注意:此操作, SELinux 会影响此命令执行需要关闭安全机制,命令:setenforce 0

重定向输出(符号>>):会在当前内容尾部追加,不覆盖原有内容。

重定向错误输出(2>):将错误的信息保存在指定文件,也会覆盖原有的内容。

2>>:也是将错误的信息保存在指定文件,但是不会覆盖原有的内容。会在当前内容尾部追加。

混合输出(&>):将标准和错误都保存在文件当中。但是会覆盖原有内容。

常用:>; >>;&>

Shell变量的作用、类型:

变量:可以改变,有类型和范围。

变量需要有范围、类型。用户指定变量(自定义变量)。

自定义变量:用户指定需要的参数。由用户自己定义、修改和使用。

变量的类型:

int 正数

string:字符串

布尔:ture false

浮点:小数

变量名:固定名称、用户自定义,系统预设

1.不要使用linux系统的操作命令,或者系统命令来指定变量名。

2.不要用中文指定变量名

3.不能使用特殊符号开头。(*#¥&),可以使用下滑线_开头

4.默认原则:最好使用名称的英文来指定变量名

5.注释,注释的目的:1.解释一下代码用途。2.方便别人看。

怎么定义变量:

变量名=变量值 (shell不需要声明变量类型,脚本语言都不要)
变量命名规则:以字母或下划线开头,区分大小写

查看变量的值:
echo $ 变量名
也可以同时查看:要加{}避免出现歧义
echo $ {变量名} ${变量名}
例如:
在这里插入图片描述
只读变量readonly:

1.只读变量不能重新赋值

2.只读变量不能 删除

赋值的时候使用引号的作用:

`:反撇号 (命令替换,把命令执行的结果,赋值给变量名)
在这里插入图片描述
赋值的时候单引号,双引号无区别

打印的时候,引号的作用:

‘’:单引号(强引用,单引号打印变量,只会输出变量名,不会输出变量的值—相当于看成字符串)

“”:双引号(弱引用,也就是打印变量的赋值)
在这里插入图片描述
在这里插入图片描述
通过read命令来获取变量:

-p prompt:指定提示符,用于提示用户输入数据。
-a array:将输入数据存储到一个数组中。

格式:
read -p “提示信息” 变量名
echo $变量名
例如:vim test,sh
在这里插入图片描述在这里插入图片描述
变量的作用范围:

默认情况下,新定义的变量只能在当前的shell环境生效,也就是局部变量

全局变量配置文件在:/etc/profile

改完:要source /etc/profile

全局变量:在程序和脚本中以及全部的shell环境中都可以被引用。

export :临时声明全局变量(只能在当前shell窗口使用,重启即失效),要想全部生效要改全局变量配置文件在:/etc/profile(对所有人生效)

/root/.bashrc_profile

/root/.bashrc:只对root生效

全局变量一般情况下不使用:一旦有重命名,会十分麻烦,会带之未知不确定性,难以调试

环境变量:

系统提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序的执行。

系统环境变量:所有人都可见,都可用。

查看系统环境变量:echo $PATH

用户级环境变量:只能对当前用户开放和使用

查看用户环境变量:echo $HOME

$USER 表示用户名称

$HOME 用户的宿主目录

$PWD表示当前所在目录

$PATH 可执行

linux添加环境变量:

PATH

位置变量:

也叫命令行参数,脚本运行时候,从外部传递变量值,让脚本来运行,可以根据需要来处理。

$n n表示的是数字 1 2 3 4 5 67 8 9 ,10以上的参数要用{}来表示

例如${10}

$0 表示命令本身 $1 $2表示从左往右依次进行赋值。要在脚本执行时候,在外部传入变量值。

例如:从$1 -$11 传值
vim weizhibianliang.sh
在这里插入图片描述
在这里插入图片描述
预定义变量:

编程语言或者脚本解释器提供的,可以自动设置,而且可以更新,但是由编程语言和脚本解释器自动完成的,人工不可以修改。

预定义变量种类:

$*、 $@:表示命令和脚本需要处理的参数

$* 加引号(“”)时,会把参数当成一个整体,不加引号,会把参数分别处理。
$ * 加引号:“$*”
vim yudingyi.sh
在这里插入图片描述
在这里插入图片描述
$*不加引号:
在这里插入图片描述
在这里插入图片描述

$@:加不加引号都会把参数分开处理。

总结:$*和 $@在不加引号时,都会把参数分开处理

$#:统计传递给脚本的参数的个数
vim ydy1.是、
在这里插入图片描述
在这里插入图片描述

$?:表示一条命令或者脚本执行后的返回码,返回码是0,表示执行正确,所有非0发返回码,都表示执行失败。

$?:只能返回上一次,最近的一次,命令或者脚本执行的返回码。
在这里插入图片描述
整数运算:(±*/)

只能用整数进行运算,不能加小数点

方式一:i=$((12+10))

方式二:expr
expr乘法 :比较特殊,需要在*(乘以号)前加上
在这里插入图片描述
方式三:i=$[12*5]

方式4:let i=12*5

i++:先赋值再自增(+1)

i–:先赋值再自减(-1)

++i:先自增(+1)再赋值

–i:先自减(+1)再赋值

bc:简易的计算器

可以支持运算(支持整数也可以支持小数)

echo 5+10 | bc

输出15
在这里插入图片描述
非整数运算:
bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。
#!/bin/bash
#加
f= ( e c h o " 4.3 + 2.5 " ∣ b c ) e c h o " 4.3 + 2.5 = (echo "4.3+2.5"|bc) echo "4.3+2.5= (echo"4.3+2.5"∣bc)echo"4.3+2.5=f"

#减
f= ( e c h o " 4.3 − 2.5 " ∣ b c ) e c h o " 4.3 − 2.5 = (echo "4.3-2.5"|bc) echo "4.3-2.5= (echo"4.32.5"∣bc)echo"4.32.5=f"

#乘
f= ( e c h o " 4.30 ∗ 2.50 " ∣ b c ) e c h o " 4.3 ∗ 2.5 = (echo "4.30*2.50"|bc) echo "4.3*2.5= (echo"4.302.50"∣bc)echo"4.32.5=f"

#除
f= ( e c h o " s c a l e = 2 ; 4.3 / 2.5 " ∣ b c ) e c h o " 4.3 / 2.5 = (echo "scale=2;4.3/2.5"|bc) echo "4.3/2.5= (echo"scale=2;4.3/2.5"∣bc)echo"4.3/2.5=f"

#混合运算
f= ( e c h o " 2.2 / ( 2.2 − 1.1 ) ∗ 2 + 1.1 " ∣ b c ) e c h o " 2.2 / ( 2.2 − 1.1 ) ∗ 2 + 1.1 = (echo "2.2/(2.2-1.1)*2+1.1"|bc) echo "2.2/(2.2-1.1)*2+1.1= (echo"2.2/(2.21.1)2+1.1"∣bc)echo"2.2/(2.21.1)2+1.1=f"

#加
f= ( a w k ′ B E G I N p r i n t 4.5 + 3.4 ′ ) e c h o " 4.5 + 3.4 = (awk 'BEGIN{print 4.5+3.4 }') echo "4.5+3.4= (awkBEGINprint4.5+3.4)echo"4.5+3.4=f"

#减
f= ( a w k ′ B E G I N p r i n t 4.5 − 3.4 ′ ) e c h o " 4.5 − 3.4 = (awk 'BEGIN{print 4.5-3.4 }') echo "4.5-3.4= (awkBEGINprint4.53.4)echo"4.53.4=f"

#乘
f= ( a w k ′ B E G I N p r i n t 4.5 ∗ 3.4 ′ ) e c h o " 4.5 ∗ 3.4 = (awk 'BEGIN{print 4.5*3.4 }') echo "4.5*3.4= (awkBEGINprint4.53.4)echo"4.53.4=f"

#除
f= ( a w k ′ B E G I N p r i n t 4.5 / 3.4 ′ ) e c h o " 4.5 / 3.4 = (awk 'BEGIN{print 4.5/3.4 }') echo "4.5/3.4= (awkBEGINprint4.5/3.4)echo"4.5/3.4=f"

#混合
f= ( a w k ′ B E G I N p r i n t ( 4.5 − 3.4 ) ∗ 2 + 3 ′ ) e c h o " ( 4.5 − 3.4 ) ∗ 2 + 3 = (awk 'BEGIN{print (4.5-3.4)*2+3 }') echo "(4.5-3.4)*2+3= (awkBEGINprint(4.53.4)2+3)echo"(4.53.4)2+3=f"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值