首页 > 技术文章 > shell 脚本

xinzaiyuan 2021-03-29 18:30 原文

目录

  1. shell 脚本介绍

  2. shell 脚本规则

    2.1 shell 脚本和其他语言对比

    2.2 变量的规则

  3. shell 脚本启动方式

  4. 编写shell 脚本注意事项

    4.1 区分单引号和双引号的不同和相同点

  5. read 传递多个参数

    5.1 参数传递

  6. 比较运算符和逻辑运算符

    6.1 比较运算符(数字)

    6.2 比较运算符(字符串)

    6.3 逻辑运算符

  7. if 语句

  8. case 规则

  9. for 循环

  10. while 循环

  11. shell 脚本的函数

    11.1 函数中的参数

    11.2 函数中的返回值

 

1. shell 脚本介绍

Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

 

2. shell 脚本规则

Shell 和python都是弱语言

  2.1 shell 脚本和其他语言对比

# 从定义变量对比
java

变量类型    变量名=变量值
int    a   =   2
string    name    =   “zhangsan”
输出:system.out.print(a)

python

变量名=变量值
a    =   2
b    =   “zhangsan”
输出:print(a)

js

var    变量名=变量值
var   a  =  1

shell

变量名=变量值
规则:变量名和变量值没有空格
a=2
输出:echo $a
输入:read  -p   “描述”   name

 

  2.2 变量的规则

    定义变量规则:变量名=值

    shell定义变量的规则:

    1:等号两边不能有空格
    2:定义特殊的变量需要用单引号或者双引号结合
    3:定义linux命令需要用反单引号

    举例:

    比如linux查看当前当前所在路径:pwd

    

3. shell 脚本启动方式

  第一种:可能会考虑是否有权限

  ./文件名.sh

  一般只是缺少可执行的权限,所以我们只需要使用 chmod  +x 文件名 赋予文件权限即可

  第二种:不需要考虑权限,强制运行

  sh  文件名.sh

4. 编写shell脚本注意事项

  文件里第一行必须是 #!/bin/bash

  脚本名称使用.sh结尾

  Shell输出值:echo $变量名

  4.1 区分单引号和双引号的不同和相同点

  

 

 

   单引号中有$变量名,输出的是$变量名

  

 

 

 5. read 传递多个参数

  read可以传递多个数据 read –p”name and passwoed”name password
超过的部分都填充在最后一个变量上

  5.1 参数传递

  向.sh文件中传递数据

  格式:

  sh  脚本名.sh  参数

  输出方法:

  $1:接收第一个参数~~$n
  $n:文件名称
  $@:所有参数 s
  $#参数个数 $0

  示例:

  普通传递多个参数

  

 

 

   看上去更直观,改进后如图下:

  

 

 

   

 

 

   $1使用方法:

   $1正常编写:

  

 

 

   输出看看效果:

  

 

 

   $1特殊编写:

  

 

 

   输出看看效果:

  这里我们传参数时只传3个参数

  

 

 

   注意你会发现第三个参数在输出后结果为空,这是因为$后面的数字是几,他的结果输出就是第几个参数
我们编写的shell是输出第4没有第3,所以我们只传递3个参数时他的第三个结果为空

  改进后如下:

  

 

 

   $0、$@、$#编写:

  

 

 

  输出看看效果:

  

 

 

   $0:输出shell脚本的名字
   $@:输出shell脚本传递参数具体的信息
   $#:输出shell脚本传递了几个参数

6. 比较运算符和逻辑运算符

  6.1 比较运算符(数字)

    -eq   比较是否相等
    -ne   比较不相等
    -gt    比较大于
    -ge   比较大于等于
    -lt     比较小于
    -le    比较小于等于

  6.2 比较运算符(字符串)

    ==  比较是否相等

    !=   比较不相等

    加一操作:((i++))  ((i+=1))

    加n操作:

    s=$(($s+$i))

    s=$[$s+$i]  ((s=$s+$i))

  6.3 逻辑运算符

    逻辑与    -a
    逻辑或    -o
    逻辑非    !

7. if 语句

  格式

  if [ 条件 ]

  then

  语句

  else

  语句
  fi

  注意点:

  1:if后面有空格
  2:条件两边有空格
  3:if条件里面存在变量,需要$,而且变量两边需要双引号
  4:fi是结束标识

  示例:

  判断用户输入的用户名(name)和密码(password)是否为admin 和 123456,如果是则提示登录成功(success),否则提示失败(fail)

  

 

 

   输出看看效果:

  

 

 

   格式:  

  if [ 条件 ]
  then
  语句
  elif [ 条件 ]
  then
  语句
  …
  else
  语句
  fi

  示例:

  输入学生的成绩,80<score<=100提示very good,60<score<=80提示good,其他则提示不及格

  

 

   输出看看效果:

  

 

8. case 规则

  格式:

  case $变量名 in
  “值”)
  语句;;
  “值”)
  语句;;
  …
  esac

  注意:

  1:case这第一行以in结尾
  2:值可以是字符串也可以是数字, 如果数字范围[0-9]
  3:结束语句;;
  4:esac结束标志

  示例:

  输入一个序号,判断该用户选择哪款产品,A:笔记本 B:手机 C:小台灯
  

 

   输出看看效果:

  

 

   请输入对客服的满意度,【0-3】不满意,【4-6】满意,【7-9】非常满意

  

 

   输出看看效果:

  

 

   

9. for 循环

  格式:

  for 变量 in 列表
  do
  语句
  done

  注意: 结束标志done

  

 

   输出看看效果:

  

  扩充:

  试想列表中的元素过多的时候,需要怎么做?
  seq mix step max

  注意:

  mix 开始数据 step:间隔 max 结束数据,如果step为1,可以省略,需要用反单引号

  

 

       

 

   步长为1时,可以省略

  输出结果看看:

  

 

   步长为2示例:

  

 

   输出结果看看:

  

 

 10. while 循环 

  while [ 条 件 ]
  do
  语句
  done

  注意:
  1: while后面有空格
  2:条件两边有空格
  3:while条件里面存在变量,需要$,而且变量两边需要双引号
  4:done是结束标识

  示例:

  求1-100之间的和

  

 

   输出结果看看:

  

 

11. shell 脚本函数

  格式:

  函数名(){
  代码
  }
  # 调用格式
  函数名

  注意点:必须先定义一个函数,然后再调用它

  

 

  输出结果看看

   

 

   11.1 函数中的参数

    使用 $n 来接收数据

    示例1:

    输入1,100两个整数进行求和运算,并打印结果

    了解参数传递

    

 

     输出结果:

    

 

     在函数中实现1,100俩数求和

    

 

     输出结果:

    

 

     示例2:

    输入任意两个整数进行求和运算,并打印结果

    

 

     输出结果看看:

    

  11.2 函数中的返回值

  Shell中函数中默认存在返回值

  查看函数的返回值$?

  

 

   注意点:

  如果没有代码错误默认返回值为0,
  有代码错误返回1
  查看返回值内容:$?

  输出结果看看

  

 

   因为我根本没有sdsdf这个目录,所以返回值为1

 

推荐阅读