Shell是一个解释器,介于特使应用程序(用户)和操作系统之间的一个桥梁,负责命令的解释
Shell的编程语言
编译型语言: 程序在执行之前需要个专门的编译过程,把程序编译成为机器语言文件,
运行时不需要重新翻译,直接使用编译的结果就行了。
程序执行效率高,依养编译器,跨平台性差些。如C、C++、java
解释型语言:
程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。
因此效率比较低。比如Python/javaScript/Shell等都是解释型语言。
Shell的解析器:
使用场景:
完成自动化的工作:自动化部署、自动化的分析等 ( 自动化运维 )
/bin/sh 是bash的一个快捷方式
/bin/bash(最多) bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin 表示非交互,不能登录操作系统
/bin/dash 小巧,高效,功能相比少一些
/bin/tcsh 具有C语言风格的一种shell,具有许多特性,但是也有一些缺陷
/bin/csh 是csh的增强版本,完全兼容csh
学习Shell语言的方法:
最简单的语言、技巧,多看、多读、借鉴、思考
特殊变量介绍和使用:
$n 功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,
十以上的参数,十以上的参数需要用大括号包含,如${10}
$#:获取所有输入参数个数,常用于循环 $*:这个变量代表命令行中所有的参数,
$*把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$?:表示读取命令的直接结果状态,返回的变量值为0,说明执行成功,非0则失败
两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
[ $A -lt $B ] :比较变量A是否小于变量B
按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
[ -w test06.sh ] : 判断文件是否有可写权限
按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
[ -f test04.sh ] :判断文件是否存在,并且是一个常规文件
if 判断
1.基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
注意事项:
-
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
-
双分号“;;”表示命令序列结束,相当于java中的break。
-
最后的“*)”表示默认模式,相当于java中的default。
for 循环
1,基本语法
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2,基本语法
for 变量 in 值1 值2 值3…
do
程序
done
while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
写一个脚本输入任意数组或则数字例如 2 3 4 5 6 7 8 9,输出最大值、最小值、平均值
#!/bin/bash
min=$ 1
max=$ 1
sum=0
for i in "$@"
do
if[$min -gt $ i]
then
min=$i
fi
if[$max-It $ i]
then
max=$i
fi
sum=$[$sum+$i]
done
echo "最大值为" $max
echo"最小值为" $min
echo"平均值为" $[$sum/$#]