Shell编程入门
什么时Shell编程
1,Shell是一个用c语言写的程序,通过Shell用户可以访问操作系统的内核
2,Shell既是一种命令语言,又是一种程序设计语言
3,Shell编程就是指shell脚本编程
4,Shell编程和Java,php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
快速入门
编写脚本
创建一个以.sh结尾 的文件hello.sh
#!/bin/bash
echo "hello world!"
#!是一个标记,告诉系统这个脚本,要用哪一个解释器执行。
echo 向窗口输出文本内容。
执行脚本
sh hello.sh
sh+脚本名称,可以不必事先设定shell的执行权限。因为这个是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被调用执行,所以不要可执行权限。
Shell基础语法
Shell变量
变量命名规则
1) 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2) 中间不能有空格,可以使用下划线(_)。
3) 不能使用标点符号。
4) 不能使用bash里的关键字(可用help命令查看保留关键字)。
注意:变量名和等号之间不能有空格。
使用变量
#!/bin/bash
# 变量的使用
# 如果想使用一个变量,只需要在变量名前面加 $ 美元符即可
name='zhangsan'
echo ${name}
# 已定义的变量,可以被重新定义
name='lisi'
echo ${name}
# 使用unset命令可以删除变量,变量被删除之后不能使用,不能删除只读变量
unset name
echo ${name}#无输出
# 使用readonly命令,可以将变量定义为只读变量,只读变量不能够被修改
name='zhangsan'
readonly name
# 尝试修改name
name='lisi'
echo ${name}
字符串
1) 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了)。
2) 字符串可以用单引号,也可以用双引号,也可以不用引号。
3) 在Shell中所有的变量默认都是字符串类型。也就是说,如果不手动指定变量的类型,那么所有的数值都是不能进行运算的。
单引号
1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。
2)单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
1)双引号中可以引用变量。
2)双引号中可以有转义字符。
获取字符串长度
#!/bin/bash
skill = "java"
echo ${skill} # 输出结果:java
echo ${#skill} # 输出结果:4
截取字符串
#!/bin/bash
#截取规则:下标从0开始
str="string_int_double"
echo ${str:2} #输出:ring_int_double
echo ${str:2,4} #输出:ring
传递参数
1)$n:我们可以在执行脚本的时候,向脚本传递参数,脚本中获取参数的格式为:$n,n就代表了数字,1 代表参数第一个,2代表第二个,以此类推。
2)$#:可以输出传入脚本内,参数的个数。
3)$* :可以将多个参数,作为一个字符串输出。
Shell算数运算符
1)Shell和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。
2) 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。
3) expr是一款表达式计算工具,使用它能完成表达式的求值操作。
4) expr表达式需要使用飘号(在esc 下方)进行包裹。
#!/bin/bash
# 注意 = 两边不能有空格, 但是expr 后面跟的运算表达式,必须有空格
var=`expr 2 + 2`
echo $var
# 常用的算数运算符
a=10
b=20
echo "加法 `expr $a + $b`"
echo "减法 `expr $b - $a`"
echo "乘法 `expr $b \* $a`"
echo "除法 `expr $b / $a`"
echo "取余 `expr $a % $b`"
# 条件表达式要放到方括号中,并且要有空格
echo "相等 `exper [$a == $b]`"
echo "不相等 `exper [$a != $b]`"
a=$b
echo "赋值 $a"
流程控制
if else
#!/bin/bash
# 每个if语句都是以 if开头fi结束,中间并带有then
# 示例代码:
a=20
b=10
if [ $a -gt $b ];then
echo "a 大于 b"
fi
#!/bin/bash
a=20
b=10
if [ a -lt b ];then
echo "a 小于 b!!!"
else
echo "a 大于 b!!!"
fi
for循环
#!/bin/bash
# 遍历 1~100之间的奇数
for i in {1..100};do
if [ $((i % 2)) -eq 1 ];then
echo $i
fi
done
while语句
#!/bin/bash
# 计算 1~100 的和
sum=0
i=1
while [$i -lt 100];do
sum=$((sum + i))
i=$((i + 1))
done
echo "计算 1~100 的和为:$sum"