linux shell脚本编程

目录

    • 一、Linux shell脚本编程(概念、变量、语句)
      • 1. shell脚本概念
      • 2. shell脚本变量
        • (1)变量介绍
        • (2)变量的作用
        • (3)变量的命名要求
        • (4)变量的分类
            • ① 用户自定义变量(赋值)
            • ② 用户自定义变量(取值)
            • ③ 用户自定义变量(数组)
            • ④ 只读变量
            • ⑤ 位置变量和预定义变量
            • ⑤ 环境变量
      • 3. shell语句
        • (1)read 输入
        • (2)expr 运算
        • (2)test 测试
        • (2)整数测试
        • (5) 文件测试
    • 二、Linux shell脚本编程(分支、多路分支、循环语句)
        • (1)if 分支语句
        • (2)case 分支语句
        • (3)for 循环语句
        • (3)循环while
        • (5)break 和 continue
    • 三、Linux shell脚本编程(函数)

一、Linux shell脚本编程(概念、变量、语句)

1. shell脚本概念

1.创建shell文件 后缀以.sh结尾

vi test.sh
  1. 执行test.sh文件

    1. bash test.sh
    2. source test.sh
    3. ./test.sh 用此命令执行,需要给改文件执行权限 使用chmod 0777 test.sh给予权限

2. shell脚本变量

(1)变量介绍

   变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
   变量可以通过变量名访问。在指令式语言中,变量通常是可变的

(2)变量的作用

   用来存放系统和用户需要使用的特定参数(值)
   变量名:使用固定的名称,由系统预设或用户定义
   变量值:能够根据用户设置、系统环境的变化而变化

(3)变量的命名要求

linux shell脚本编程_第1张图片

(4)变量的分类

linux shell脚本编程_第2张图片

① 用户自定义变量(赋值)

在shell编程中通常使用全大写变量,方便识别

COUNT=1 

变量的调用:在变量前加$

echo $COUNT 

Linux Shell/bash从右向左赋值

Y=y 
X=$Y 
echo $X 
输出:y 

使用unset命令删除变量的赋值

Z=hello 
echo $Z 
输出:hello 
unset Z 
echo $Z
输出:空
② 用户自定义变量(取值)

双引号: 允许通过$符号引用其他变量值

   弱引用,其中的变量引用会被替换为变量值

单引号: 禁止引用其他变量值,$视为普通字符

   强引用,其中的变量引用不会被替换为变量值,而保持源字符串

反撇号: 命令替换,提取命令执行后的输出结果,``和$(…)作用相同

linux shell脚本编程_第3张图片

③ 用户自定义变量(数组)
echo $a:默认显示数组a的第一个元素 

echo ${a[0]} :显示数组中第一个元素,以此类推 

echo ${a[-1]}: 显示数组中最后一个元素 

echo ${a[*]} 和echo ${a[@]} :显示数组中所有元素 

echo ${#a[@]} :显示数组中元素的个数 

echo ${a[@]:起始元素id:元素个数]} :显示数组中以起始元素为首的指定个数的元素(注意:这里起始元素id不能为负值 

unset a[n] 删除数组中的第n个元素 

unset a 删除a这个数组

a[n]=100 给第n个元素赋值

linux shell脚本编程_第4张图片
在这里插入图片描述

④ 只读变量
  1. 变量值不允许修改(重新赋值)的情况
  2. 无法使用 unset删除
  3. 最快方法重启
  4. eadonly
⑤ 位置变量和预定义变量
 $0   与键入的命令行一样,包含脚本文件名
 $1,$2,……$9  分别包含第一个到第九个命令行参数
 $#   包含命令行参数的个数
 $@   包含所有命令行参数:“$1,$2,……$9”
 $?   包含前一个命令的退出状态
 $*   包含所有命令行参数:“$1,$2,……$9”
 $$   包含正在执行进程的ID号
⑤ 环境变量

常用环境变量

$USER 表示用户名称 
$HOME 表示用户的宿主目录 
$LANG 表示语言和字符集 
$PWD 表示当前所在工作目录 
$PATH 表示可执行用户程序的默认路径 
export可以将变量指定为全局变量

3. shell语句

(1)read 输入

  read从标准输入读入一行, 并赋值给后面的变量,其语法为:
        read var
  把读入的数据全部赋给var
        read var1 var2 var3
  把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, ……把其余所有的词赋给最后一个变量.
  如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。

linux shell脚本编程_第5张图片

(2)expr 运算

  算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作。例如:

linux shell脚本编程_第6张图片

(2)test 测试

  test语句可测试三种对象:

        字符串 整数 文件属性

 s1 = s2 	测试两个字符串的内容是否完全一样
 s1 != s2	测试两个字符串的内容是否有差异
 -z s1 	测试s1 字符串的长度是否为0
 -n s1 	测试s1 字符串的长度是否不为0

linux shell脚本编程_第7张图片

(2)整数测试
 a -eq b 		测试a 与b 是否相等
 a -ne b		测试a 与b 是否不相等
 a -gt b 		测试a 是否大于b
 a -ge b 		测试a 是否大于等于b
 a -lt b 		测试a 是否小于b
 a -le b 		测试a 是否小于等于b

linux shell脚本编程_第8张图片

(5) 文件测试
 -e name    测试一个文件是否存在
 -d name    测试name 是否为一个目录
 -f name    测试name 是否为普通文件
 -L name    测试name 是否为符号链接
 -r name    测试name 文件是否存在且为可读
 -w name    测试name 文件是否存在且为可写
 -x name    测试name 文件是否存在且为可执行
 -s name    测试name 文件是否存在且其长度不为0
 f1 -nt f2  测试文件f1 是否比文件f2 更新
 f1 -ot f2  测试文件f1 是否比文件f2 更旧

linux shell脚本编程_第9张图片

二、Linux shell脚本编程(分支、多路分支、循环语句)

(1)if 分支语句
语法结构: 

if      表达式 
then  
		命令表 
fi 

如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。
if和fi是条件语句的语句括号, 必须成对使用; 命令表中的命令可以是一条, 
也可以是若干条。
语法结构为: 

if   表达式 
then 
			命令表1 
else  
			命令表2 
fi 
如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句. 注意: 无论表达式是否为真, 都有语句要执行.

linux shell脚本编程_第10张图片

语法结构为: 

if   表达式1 
then 
			命令表1 
elif 表达式2 
then 
			命令表2 
else
			命令表3
fi 
如果表达式为真, 则执行命令表1中的命令, 再退出if语句; 否则执行命令表2中的语句, 再退出if语句. 注意: 无论表达式是否为真, 都有语句要执行.

linux shell脚本编程_第11张图片

?????判断用户是否存在,如果存在,打印存在,如果不存在,打印不存在
linux shell脚本编程_第12张图片

(2)case 分支语句
case…esac 

多路分支语句case用于多重条件测试, 语法结构清晰自然.  其语法为: 
case   字符串变量   in 
	模式1) 
	命令表1 
	;; 
	模式2 | 模式3) 
	命令表2 
	;; 
	…… 
	模式n) 
	命令表n 
	;; 
esac

linux shell脚本编程_第13张图片

(3)for 循环语句
当循环次数已知或确定时,使用for循环语句来多次执行一条或一组命令。格式为:

	for   变量名   in   单词表 
	do 
			命令表 
	done 
	
变量依次取单词表中的各个单词,  每取一次单词, 就执行一次循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。 
如果单词表是命令行上的所有位置参数时, 可以在for语句中省略 “in  单词表” 部分。

linux shell脚本编程_第14张图片

linux shell脚本编程_第15张图片
linux shell脚本编程_第16张图片

linux shell脚本编程_第17张图片

(3)循环while
语法结构为:
 
	while    命令或表达式 
	do 
		命令表 
	done
 
while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。 
while语句的退出状态为命令表中被执行的最后一条命令的退出状态。

linux shell脚本编程_第18张图片

(5)break 和 continue
breakcontinue 

	break  n  则跳出n层; 
	continue语句则马上转到最近一层循环语句的下一轮循环上, 
	continue  n则转到最近n层循环语句的下一轮循环上.

linux shell脚本编程_第19张图片

三、Linux shell脚本编程(函数)

linux shell脚本编程_第20张图片
linux shell脚本编程_第21张图片

linux shell脚本编程_第22张图片

你可能感兴趣的:(linux,bash,运维)