Shell介绍

  • Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一部分程序
  • 应用程序 > Shell > Linux内核 > 硬件

    Shell脚本的执行方式

  • 脚本以#!/bin/bash开头

  • 示例:编写shell脚本在控制台输出”hello world”
    • vi myshare0.sh
    • 输入:
      • !/bin/bash

      • echo “hello world”
      • 保存退出
    • 添加可执行权限
      • chmod u+x myshare0.sh
    • 运行:./myshare0.sh
  • 没有可执行权限时可以用以下方法强制执行(不推荐)
    • sh ./myshare0.sh
  • 单行注释:#
  • 多行注释::<<!注释掉的代码!

    Shell变量

    Shell变量的介绍

  • Linux Shell中的变量分为系统变量和用户自定义变量

  • 系统变量:
    • $HOME,$PWD,$SHELL,$USER
    • 示例:输出系统变量
      • echo “PATH=$PATH”
      • echo “user=$USER”
  • 显示当前Shell中的所有变量:set

    • set | more

      Shell变量的定义

  • 定义变量:变量=值

    • A=100
  • 撤销变量:unset 变量
    • unset A
  • 定义静态变量:readonly 变量=值,静态变量不能unset
  • 可以把一个变量提升为环境变量,可供其他Shell程序使用
  • 注意事项:
    • 定义变量时等号两侧不能有空格
    • 变量名称习惯上大写
  • 将命令的返回值赋给变量

    • 变量=命令
      • RESULT=ls -l /home
    • 变量=$(命令)
      • RESULT=$(date)

        设置环境变量

  • 基本语法:

    • export 变量名=值(将Shell变量输出为环境变量)
    • source 配置文件(让修改后的配置信息立即生效)
    • echo $变量名(查询环境变量的值)
  • 在/etc/profile文件中定义TOMCAT_HOME环境变量

    • vi /etc/profile
      • TOMCAT_HOME=/opt/home
      • export TOMCAT_CAT
    • source /etc/profile

      位置参数变量

  • 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

    基本语法

  • $n(n为数字,$0表示命令本身,$1-9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

  • $:代表命令行中所有的参数(不包括命令本身),$把所有的参数看成一个好整体
  • $@:代表命令行中所有的参数(不包括命令本身),把每个参数区别对待
  • $#:代表命令行中所有参数的个数(不包括命令本身)
  • 示例:
    • vi positionpara.sh
      • !/bin/bash

      • echo “$0 $1 $2”
      • echo “$*”
      • echo “$@”
      • echo “参数个数=$#”
    • chmod 744 positionpara.sh
    • ./positionpara.sh 100 200

image.png

预定义变量

  • 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
  • $$:当前进程的进程号(PID)
  • $!:后台运行的最后一个进程的进程号
  • $?:最后一次执行的命令的返回状态
    • 0:上一个命令正确执行
    • 非0:上一个命令执行不正确
  • 示例
    • vi prevar.sh
      • !/bin/bash

      • echo “当前的进程号=$$”
      • 以后台的方式运行脚本

      • ./myshare0.sh &
      • echo “最后的进程的进程号=$!”
      • echo “执行的值=$?”
    • chmod 744 prevar.sh
    • ./prevar.sh

image.png

运算符

  • $((运算式))
  • $[运算式]
  • expr m + n
    • 注意expr运算符间要有空格
    • *:乘
    • /:除
    • %:取余
  • 示例:计算(2+3)* 4的值
    • 1
      • RESULT1=$(((2+3)*4))
      • echo “result1=$RESULT1”
    • 2
      • RESULT2=$[(2+3)*4]
      • echo “result2=$RESULT2”
    • 3
      • TEMP=expr 2 + 3
      • RESULT3=expr $TEMP \* 4
      • echo “result3=$RESULT”
  • 示例:求命令行两个参数的和

    • SUM=$[$1+$2]
    • echo “SUM=$SUM”

      判断语句

      if

  • if [ 条件 ]

  • then 执行语句
  • fi

    两个整数的比较

  • =:字符串比较

  • -lt:小于
  • -le:小于等于
  • -eq:等于
  • -gt:大于
  • -ge:大于等与
  • -ne:不等于

    按照文件权限进行判断

  • -r:是否有读的权限

  • -w:是否有写的权限
  • -x:有执行的权限

    按照文件类型进行判断

  • -f:文件存在并且是一个常规的文件

  • -e:文件存在
  • -d:文件存在并是一个目录

    示例

    image.pngimage.png

    流程控制

    if

    if [ 条件判断语句 ]
    then
    执行语句
    elif [ 条件判断语句 ]
    then
    执行语句
    fi
    image.png

    case

    image.png

for

下面这个例子可以看出$*和$@的区别
image.pngimage.png
image.png

while

image.png

读取控制台输入

  • read 选项 参数
  • -p:指定读取值时的提示符
  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

image.png

函数

系统函数

示例

  • basename 路径名 后缀名
  • 返回完整路径最后/的部分,常用于获取文件名
    • 示例:返回/home/aaa/test.txt的”test.txt”部分
    • basename /home/aaa/test.txt
  • dirname 路径名
  • 返回完整路径最后/的前面的部分,常用于返回路径部分
    • 示例:返回/home/aaa/test.txt的/home/aaa
    • dirname /home/aaa/test.txt

      自定义函数

      image.png

其他知识点

  • 用echo输出时使用单引号将要输出内容括起来,那么会将括起来的内容原样输出,不考虑变量等