赞
踩
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.3−2.5"∣bc)echo"4.3−2.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.30∗2.50"∣bc)echo"4.3∗2.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.2−1.1)∗2+1.1"∣bc)echo"2.2/(2.2−1.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=
(awk′BEGINprint4.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=
(awk′BEGINprint4.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=
(awk′BEGINprint4.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=
(awk′BEGINprint4.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=
(awk′BEGINprint(4.5−3.4)∗2+3′)echo"(4.5−3.4)∗2+3=f"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。