一、Shell 编程

  1. Shell编程,编写Shell脚本,并且该脚本可以运行,一般用于Linux运维(云计算)
  2. Shell是一个用C语言编写的程序,可以通过shell进行操作系统的服务。
  3. Shell Script 是一个脚本语言,跟javaphppythonscala一样,都有变量、方法、循环、数组,IO流都有。
  4. Linux中有多个shell解释器(类似于java JRE),可以通过一些命令查看有哪些解释器。
  5. 解释器中比较有名的是Bash,简单易用,免费,经常使用这个,Bash也是大多数Linux厂商使用的解释器。

1、常见的shell解释器有哪些呢?

cat  /etc/shells   查看当前电脑上支持的解释器有哪些?

image.png

2、shell的入门编程

touch  01.sh   创建一个文件
vi  01.sh   进行编辑
通过输入i  进行编辑
编辑的内容是:
#!/bin/bash
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'
echo 'Hello Shell'

esc退出编辑,:wq!  进行保存

接着运行:
/bin/bash  01.sh   执行该脚本文集  以后,在linux中看到 xxx.sh  就是可执行文件,类似于windows 中的bat

我们也可以这样运行:/bin/sh 01.sh

image.png

这种还是太麻烦了,最简单的执行命令应该是  ./01.sh
chmod +x 01.sh
付完权限就可以执行了。

image.png

3、Shell编程语法

1) 变量

写法:
your_name="laoyan"   这个中间不能有空格,变量名和等号之间不能有空格
命名规则:
1、只能是英文字母,数字,和下划线,首个字符不能是数字开头的。
2、中间不能有空格,可以有下划线    错误演示: user name="张三"
3、不能使用标点符号
4、不能使用关键字 bash中的关键字

所谓的脚本就是将我们经常使用的linux命令汇总在一个文件中而已。
image.png
unset 不能删除 只读变量
image.png

2)字符串

在我们的shell编程中,字符串可以使用单引号,双引号,也可以不用任何引号
单引号和双引号的区别:
看演示代码

image.png
获取字符串的长度:

skill="java"
echo ${#skill}  打印该字符串的长度

截取字符串演示:
image.png
查找子字符串,是分开查找的,不能看做是查找子字符串。

 echo `expr index "$str" ia`
如果是这样的情况,返回的是 字母a 所在的下标,我们可以将后面这个词看做分开查找的。
ia  == i  a  
先查找ia 有没有

image.png

3)参数

$0 表示当前运行的文件名字
$n  表示第n个参数
一定要写在双引号里面
#!/bin/bash
echo "查看shell脚本中的参数"
echo "目前正在执行的脚本的名字是:$0"
echo "获取到的第一个参数是:$1"
echo "获取到的第一个参数是:$2"
echo "获取到的第一个参数是:$3"
echo "获取到的第一个参数是:$4"

image.png

#!/bin/bash
echo "第一个参数:$1"
echo "总共有多少个参数:$#"
echo "所有的参数值是什么,以字符串的形式展示$*"

image.png

$*  以字符串的形式展示所有的参数
$@  拿到所有的参数,可以当做一个数组

#!/bin/bash
echo '------------展示$*-------------'
for i in "$*";do
   echo $i
done

#!/bin/bash
echo '------------展示$@--------------'
for i in "$@";do
   echo $i
done

image.png

4)shell脚本中的运算符

shell和其他的编程一样,是支持运算的,但是我们的bash 不支持。
我们可以借助 expr 这个表达式工具完成,数据之间的加减乘除运算。

image.png
image.png

bash中也可以不使用expr 进行运算
可以使用(())  $(())  $[] 进行算数运算
((a++))  可以执行类似于这样的运算
将两个值进行运算 $((3 + 5))
a=2
b=3
$((a + b)) // 可以
$(($a + $b)) //也可以

image.png

5) 流程控制 (if else switch)类似这样的用法

if语句的语法:
if condition; then
    command1 
    command2
    ...
    commandN 
fi



if else 的语法

if condition; then
    command1
    command2
    ...
    commandN
else
    command
fi
#!/bin/bash
a=20
if [ $a -gt 10 ];then
   echo "a的值大于10"
fi

编写条件的时候,使用[]  里面的代码跟[]  之间有空格,否则报错!

#!/bin/bash
a=20
if [ $a -gt 10 ];then
   echo "a的值大于10"
else
   echo "a的值小于等于10"
fi


关系运算符的一些特换字符

运算符 说明 英文 举例
-eq 检测两个数是否相等,相等返回 true。 equal [ b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 not equal [ b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 greater than [ b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 less than [ b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 Greater than or equal to [ b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 Less than or equal to [ b ] 返回 true。

编写一个案例:

#!/bin/bash
a=20
b=10
if [ $a \> 100 ];then
 echo "$a 大于100"
fi
if [ $a -lt 100 ];then
 echo "$a 小于100"
fi
if [ $a -eq $b ];then
  echo "$a 等于$b"
fi

image.png

6) 读取我们控制台的数据

类似于我们之前的Scanner

read -p "请输入您的姓名:"  name
echo $name

image.png

shell编程三剑客 【grep sed awk】