shell编程规范与变量

概述

shell的作用

翻译,把用户输入的指令转换成二进制,传递给内核执行,内核执行完成之后,再通过shell翻译成人类能够看懂的语言

linux系统中的shell的种类:

bash:linux默认的shell

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

nologin:禁止用户登录

cat /etc/shells:系统自带的shell

除非指定,默认都是bash

cat /etc/passwd:最后一个字段,表示系统登录时用户使用的shell

shell脚本:

什么是脚本:

扩建语言,动态语言,也是一种编程语言

控制软件应用程序,脚本都是以文本形式保存。只在调用时才会进行解释或者编译

shell脚本的构成:

第一类:开头,注明解释器,#!/bin/bash (默认系统自带的,不加也会默认启动)#!/usr/bin/python

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

第三类:注释语句#作为注释,注释的代码不会被执行

脚本执行的方式:

工作中都是使用赋权执行,sh和source只限于调试阶段

1.不需要赋予执行权限就可以执行

sh

source:点命令,也是一个符号,是bash的内部命令,自带的。作用:读取文件当中的可执行命令,然后会加载到shell中,不用重启直接生效

2.赋权执行:执行权限

chmod :赋权命令

./first.sh:相对路径执行,当前目录

/opt/first.sh:绝对路径执行

重定向与管道

重定向的操作:

重定向输出:>,把指定结果保存到文件中,会覆盖原有的内容

重定向输出:>>,会在当前的内容的尾部追加,不覆盖原有的内容

重定向输入:<,从指定文件中读取数据,也可以理解为免交互(需要关闭安全机制,否则会出错)

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

重定向错误输出:2>>,将错误信息保存到指定文件,不覆盖原有的内容

混合输出:&>,标准和错误都保存到文件当中,会覆盖原有的内容

管道符:|

管道符的作用:把管道符前面的命令结果,作为管道符后面命令的参数,也就是操作对象

管道符主要是对文本内容的处理,命令的结果也是一个文本内容

cat /etc/passwd | grep "root"

shell变量的作用、类型

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

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

自定义变量:用户指定需要的参数

变量的作用:

用来存放系统和用户需要使用的特定参数(值)

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

变量的类型:

int:整数

string:字符串

布尔:true ;false

浮点:小数

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

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

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

3.不要使用特殊字符号开头,¥#&*,可以用_开头

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

5.注释,目的:1.解释一下代码用途。2.万一你离职了,后面的人好交接。

自定义变量:

指定变量名:

变量名是区分大小写的

aa=test1

AA=test2

查看变量名:echo

最好加上{}避免发生歧义

echo ${aa}

echo ${AA}

删除变量:unset

unset aa

unset AA

赋值的时候引号的作用:

`` :反撇号,命令替换,把命令执行的结果赋值给变量

' ' :单引号,强引用,用单引号打印变量,只会输出变量名,不会输出变量的值,只会打印变量的名称

" " :双引号,弱引用,打印变量的赋值

通过read命令来获取变量:

-p(一定要加" "否则会出错):指定提示符,提示用户输入数据

格式:read -p " " a(变量名)

只读变量:readonly

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

2.只读变量不能删除

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

默认情况下,新定义的变量只能在当前的shell中生效,也可以叫局部变量

export:声明全局变量,也可以查看;临时声明,只对当前的shell中,重启失效

永久声明的文件:

/etc/profile:对所有人

/root/.bash_profile:只能对root用户生效

环境变量:

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

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

echo $PATH:可执行程序的默认路径

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

echo $HOME:看所有用户级

echo $USER:表示用户名称

echo $PWD:表示当前所在目录

echo $PATH:可执行程序的默认路径

位置变量:

命令行参数

脚本运行时,从外部传递变量值,让脚本来运行,可以根据需要来进行处理

$n:n表示的是数字:1、2、3、4、5、6、7、8、9、${10},10以上的参数要用花括号来表示。

sh weizhi.sh 10 20 :传参

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

$1=10

$2=20

创建11个变量,分别给他们传参:

预定义变量:

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

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

$*:加引号时,会把参数当成一个整体处理;不加引号,会把参数分别处理

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

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

$#:统计传递给脚本参数的个数

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

注意:$?只能返回上一次,最近一次命令或者脚本执行的返回码

利用上面创建的11个变量做一个整数运算和一个if语句:

更加直观的表面了$#和$*的作用

$#就表示传参的个数,这边传了11个数,所以$#的结果就为11

$?就表示返回码,因为if语句不满足条件,启动else所以返回码为1,直观的表现了语句是否执行失败。

数值运算:

整数运算:

方法一:i=$(($a+$b))

+加法-减法*乘法/除法%取余

方法二:expr

i=$(expr $a \ * $b)乘法要加\

方法三:let

let i=$a*$b

i++ i=$(($i+1)):先赋值,再加i=1 i=1+1 i=2+1 每次自加1

i--:每次自减1 先赋值再减

i+=2:每次自加2 先赋值,再加2

++i:先加再赋值,自加1

--i:先减再赋值,自减1

非整数运算:

bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。

#!/bin/bash

#加

f=$(echo "4.3+2.5"|bc)

echo "4.3+2.5=$f"

#减

f=$(echo "4.3-2.5"|bc)

echo "4.3-2.5=$f"

#乘

f=$(echo "4.302.50"|bc)

echo "4.32.5=$f"

#除

f=$(echo "scale=2;4.3/2.5"|bc)

echo "4.3/2.5=$f"

#混合运算

f=$(echo "2.2/(2.2-1.1)2+1.1"|bc)

echo "2.2/(2.2-1.1)2+1.1=$f"

#加

f=$(awk 'BEGIN{print 4.5+3.4 }')

echo "4.5+3.4=$f"

#减

f=$(awk 'BEGIN{print 4.5-3.4 }')

echo "4.5-3.4=$f"

#乘

f=$(awk 'BEGIN{print 4.53.4 }')

echo "4.53.4=$f"

#除

f=$(awk 'BEGIN{print 4.5/3.4 }')

echo "4.5/3.4=$f"

#混合

f=$(awk 'BEGIN{print (4.5-3.4)2+3 }')

echo "(4.5-3.4)2+3=$f"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值