shell编程学习笔记

shell编程学习笔记

shell

shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序。

shell脚本的执行方式

脚本格式要求

  • 脚本以#!/bin/bash开头
  • 脚本需要有可执行权限

脚本执行方式

直接执行具有’x’权限的脚本文件

首先赋予脚本的x(执行)权限,再执行脚本

./绝对路径./相对路径

使用指定的解释器程序

  • bash hello.sh
  • sh hello.sh

通过source命令或’.‘读取脚本内容执行

  • source hello.sh
  • .hello.sh

shell 变量

shell变量的介绍

  • linux shell中的变量分为:系统变量和用户自定义变量
  • 系统变量:$HOME,$PWD,$SHELL,$USER
  • 显示当前shell中的所有变量:set

shell变量的定义

基本语法

  • 定义变量:变量名=值(中间不能有空格)
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量,注意:不能unset

定义变量的规则

  • 变量名称可以由字母、数字和下划线组成,但不能以数字开头
  • 等号两侧不能有空格
  • 变量名称一般习惯大写

设置环境变量(全局变量)

基本语法

  • 将shell变量输出位环境变量/全局变量

      export 变量名=变量值
  • 让修改后的配置信息立即生效

      source 配置文件
  • 查询环境变量的值

      echo $变量名

位置参数变量

得到命令行的参数信息

基本语法

  • $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如:${10}
  • $*:代表命令行中所有的参数,把所有的参数看成一个整体
  • $@:代表命令行中所有的参数,把每个参数区别对待
  • $#:命令行中所有参数的个数

预定义变量

shell设计者事先定义好的变量,可以直接在shell脚本中使用

基本语法

  • $$:当前进程的进程号(PID)
  • $!:后台运行的最后一个进程的进程号(PID)
  • $?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令的正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确。

运算符

  • "$((运算式))""$[运算式]"
  • expr m + n (运算符之间要有空格)
  • 如果希望将expr的结果赋给某个变量,使用``(反引号)

条件判断

判断语句

基本语法

if [ condition ] (condition 前后要有空格)   

非空返回true

判断语句

常用的判断条件

字符串比较

= : 字符串比较

两个整数的比较

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

按照文件权限进行判断

  • r:有读的权限
  • w:有写的权限
  • x:有执行的权限

按照文件类型进行判断

  • -f:文件存在并且是一个常规文件
  • -e:文件存在
  • -d:文件存在且是一个目录

流程控制

if 判断

基本语法

1
2
3
if [ 条件判断式 ]
then
fi

多分支

1
2
3
4
5
6
7
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi

case 语句

基本语法

1
2
3
4
5
6
7
8
9
10
11
12
13
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...
...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

for 循环

基本语法1

1
2
3
4
for 变量 in 值1 值2 值3...
do
代码
done

基本语法2

1
2
3
4
for((初始值;循环控制条件;变量变化))
do
代码
done

while 循环

基本语法1

1
2
3
4
while [ 条件判断式 ]
do
代码
done

read —- 读取控制台输入

基本语法

read (选项) (参数)

选项

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

参数

便令: 指定读取值的变量名