Shell编程
第一个Shell程序
第一行: #! 是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪种shell。后面的/bin/bash指明了解释器的具体位置。
第二行:echo命令是向标准输出设备(显示器)输出文件,写在.sh文件中和在终端直接输入命令效果一样。
代码后面的内容,#表示注释的作用,注释的代码不会被系统解析
稍微复杂一点的Shell脚本
read person: 表示让用户从终端输入一个名字,把这个名字赋值给变量person
$person :表示将上面输入的名字带入到这个位置,然后执行输出
Shell:也是一种编程语言,跟C、Java不同的是,shell是一种弱类型语言,是一种解释性语言,直接通过解释器解释。
Shell变量
变量的定义、赋值、删除
变量是任何的编程语言不可缺少的部分,变量是用来存放数据的。
变量其实就是在内存中开辟的一小块空间。
解释性语言里面,声明变量不需要指明类型
在shell中,所有的变量的值,都是字符串
定义变量的方式:
变量名=值
变量名='值'
变量名="值"
变量名的命名规范:
由数字、字母、下划线组成
必须以字母或者下划线开头
不能使用关键字
尽量让变量可以望文知意
使用变量,在变量名前加上$符号
变量在使用的时候,可以加上{}
如果不加{} ,变量不会被解析
变量可以被新值重新赋值,原来的值就失效了
单引号和双引号的区别
输出的时候使用双引号的话,会将双引号中的变量解析为定义好的值,然后输出,单引号不会解析这个变量,直接将原内容输出。
一般输出的时候使用双引号。
输出结果
只读变量 readonly
删除变量
unset 变量名
删除以后,变量就不能再使用了,不能删除只读变量
echo 向屏幕输出一行内容
echo -n 实现输出内容不换行
定义一个人,姓名是tom,年龄是30,身高是180cm,体重是70kg,使用echo输出这个人的自我介绍
格式是:我是xxx,我今年XX岁,我的身高是XXcm,我的体重是xxkg。
结果
Shell的数学运算
常用的算数运算符
表达式:使用运算符连接的式子,如a>b,称为表达式,
表达式的结果是true or false 在Linux使用1和0表示
+、-、*、/、%(求余)
** 幂运算 2**3 ==> 2^3 ==8
++,-- 自增、自减 ,给自身加1或者减1
!、&&、|| 逻辑取反、逻辑与、逻辑或
> , >= , < , <= 比较运算符
== 、!=、= 相等 不等 赋值
+=、-=、*=、/= 赋值运算符 a+=1 表示a=a+1
Linux的运算工具
(( )) 用于整数运算 ,效率较高
let 用于整数运算,和括号类似
$[ ] 用于整数运算
expr 用于整数运算,也可以处理字符串,写起来麻烦
bc 可以处理整数和小数
(( )) 的使用
((表达式))
第一种用法:声明变量,直接把变量写在(())里面,可以不用加$
第二种用法:如果变量写在(())外面,那么需要加上$
++、--操作 : 如果++在变量之后,执行的时候,先把变量参与其他的运算以后,再做++操作,做完++操作,把变量值改变
如果++在变量之前,先执行++操作,然后再执行其他运算
逻辑运算符 !,&&,||
取反运算需要使用 $[ ]
let的用法
let x+y
条件分支语句
正常情况下,代码从上到下,依次执行
通过条件分支语句,可以改变代码的运行顺序,按照给定的条件进行执行对应的代码
if语句
if 条件
then
代码体
fi
或者
if 条件 ; then
代码体
fi
如果条件的结果为真,那么则执行代码体语句
结果
判断其他情况的语法:
if 条件
then
代码体1
else
代码体2
fi
结果
输入学生的成绩,来判断成绩的等级,90分以上 为优秀,80-90为良好,70-80为一般,60-70为刚及格,小于60为不及格。
练习1
输入学生的成绩,来判断成绩的等级,90分以上 为优秀,80-90为良好,70-80为一般,60-70为刚及格,小于60为不及格。
判定输入的数字1-7,返回星期几,1对应星期一,7对应星期天,如果输的值不在范围,提示输入错误
case in 语句
语法:
case 变量 in
值1)
代码体1
;;
值2)
代码体2
;;
...
*)
代码体n
esac
示例:
循环语句
一般,在出现一些重复性代码语句,然后输出的内容相同或者不同的情况,可以优化代码为循环语句
while循环
语法
while 条件
do
代码体
条件变化语句
done
使用while循环求1-100 的和
求1-100之间偶数的和
写一个循环,实现从键盘输入两个数,求这两个数之间的所有数字的和
通过循环来实现一个简单的加法计算器,用户循环输入数字,计算最后用户输入的所有数字的和
结果
for循环
语法:
for((表达式1;表达式2;表达式3))
do
代码体
done
1,先执行表达式1
2,再执行表达式2,如果2成立,执行代码体,如果不成立,循环结束
3,代码体执行完以后,再执行表达式3
4,重复执行2和3,直到2不成立,结束循环
使用for循环求1-100的和
for循环的嵌套
******
******
******
******
使用for循环写一个乘法口诀表
打印等腰三角形
结果
for in 循环
语法:
for 变量 in 值的集合
do
代码体
done
1-100的和
1-100的偶数和
列出当前目录中的以.sh结尾的脚本文件
break
跳出当前循环
break n,表示跳出循环才层数,不加n表示跳出当前整个循环
continue
跳出本次循环,执行下一次循环