shell编程(shell编程四)

一.shell编程

1.概念

shell就是一个命令行的程序,用操作系统和用户的交互

csh -------- >rsh -------->bash

shell可以用来执行用户输入的命令

shell编程就是将在命令行执行的命令写到一个文件中,再使用shell去执行这个程序,提高效率,这种方式就叫shell编程

这个文件也叫作shell脚本,shell编程也叫脚本程序

shell脚本属于解释性语言,不需要编译直接运行

2.shell

shell脚本文件以 .sh作为后缀,第一行应该写上执行shell脚本的shell路径。如下:

#!/bin/bash

shell脚本中使用#作为单行注释

注:不要再共享目录下写shell脚本

执行:

启动新bash来执行 ----- bash shell文件路径

将shell脚本加上可执行权限,直接运行 ----- ./shell文件路径

使用./source运行shell脚本(本shell) ----- . shell文件路径

注:shell语法中对空格和空行非常敏感,不能随意添加空格空行

3.输入输出

(1)输出 ---------- echo

用法:

echo 输出的内容

echo -n表示本行最后不换行

" "中的 $变量名 会被替换为变量的值

’ ’ 中不会做这种替换

``(反引号)中的命令会被它执行的结果所替代

(2)输入 ----------- read

用法:

read 变量(可以写多个变量,依次赋值)

read -p ...(提示信息) 变量名

read命令是将输入的内容保存到变量中

(3)变量

(1)查看shell中所有的变量

declare --------- 变量和函数

set -------- 变量和函数

env -------- 环境变量

(2)变量使用语法

变量=变量值 -------------- 定义/修改变量

$变量 --------------- 获取变量值

shell中的变量没有类型,默认使用字符串处理。

shell中的变量分为全局变量和本shell变量

本shell中的变量只能在本shell中使用

全局shell变量可以在子shell中(本shell直接/间接启动的shell)使用

变量默认是本shell变量,可以使用export将变量导出为全局变量

unset 变量名 --------------- 删除变量

变量与$组合使用:

${变量名:-值} ----- 变量存在取变量的值,变量不存在取后面的值

${变量名:=值} ----- 变量存在取变量的值,变量不存在定义变量为后面的值

${变量名:+值} ------ 变量存在取变量的值,变量不存在取空值

${变量名:?值} ----- 变量存在取变量的值,变量不存在输出错误信息

${#变量名} ------ 变量的长度

变量名=  ----- 空值变量

以上语法中加:认为空值不是有效值,不加:认为空值是有效值

4.数组的使用

直接使用即可,不需要定义,下标也不要求连续

通过 ${数组名[下标]} 来获取数组中元素的值,直接把数组名当变量使用获取的是第一个元素的值

可以将变量直接当数组使用,这时变量的值就存放在下标为0的元素中 a[ * ] 代表整个数组, ${#数组名[*]} 可以获取数组元素个数

read -a 数组名 -------------- 所有输入的数据都存入数组中

5.特殊变量

$# ----- 命令行参数个数,不包括自己

$* ----- 所有命令行参数的内容

$? ----- 获取上一个命令的返回状态(0---正常 非0---出错)

$$ ----- 当前进程进程号

$0 ----- 当前进程名

$n ----- 命令行第n个参数

6.条件表达式

shell中可以使用 [ ] 或者 test命令 来计算条件表达式

注:中括号和表达式中间必须有空格,表达式的条件和值之间也要有空格

大于: -gt

小于: -lt

等于: -eq

不等于: -ne

大于等于: -ge

小于等于: -le

与: -a

或: -o

非: !

注:表达式中可以有变量,但是必须用变量的值

[ ] 和 test命令 也可以用来对文件和字符串进行判断

-e:测试一个文件是否存在

-f:测试一个文件是不是普通文件

-d:测试一个文件是不是目录

-r:测试一个文件是否有读权限

-w:测试一个文件是否有写权限

-x:测试一个文件是否有执行权限

-s:测试一个文件是否非空

-z:测试字符串是否为空

-n:测试字符串是否非空

注:在中括号中和test中也可以使用==和!=,别的运算符不能用

在$之后的[]中可以计算整数算数表达式(表达式中可以有变量的参与), ** 表示计算指数

[[ ]] ---------- 双中括号用法和[]几乎一样,[[]]内部可以使用运算符&&和||,不能使用 -a -o,可以直接使用变量

(( )) ---------- 双小括号内部直接使用运算符号,而且不用空格,内部直接使用变量,不能使用[ ]中语法

7.if结构

语法:

iffi(必须有) 命令 / [] / [[]] / (())

thenfi(必须有) 命令

elif  命令 / [] / [[]] / (())

then 命令

else 命令

fi(必须有)

8.case结构

case结构也可以实现分支,语法如下:

case $变量 in

值1)

    命令;;

值2)

    命令;;

值3)

    命令;;

...

*)

    ....

esac

9.循环结构

(1)for循环 ----------- 遍历一组数据

语法格式:

for 变量 in 一组数据

do

    .......

done

(2)while循环 --------- 条件成立继续循环,不成立结束循环

语法格式:

while 条件/命令

do

    ....

done

expr可以用来计算整数的加减法,我们经常用来判断输入的数据是不是整数,返回0或者1表示计算正常,大于1表示错误

expr还可以求出变量从第一位开始某些内容出现的次数

语法:

expr $变量:'[...]'

bc命令可以计算小数,用法:

"算数表达式"|bc

使用 scale= 数字来控制结果显示小数的位数

计算指数需要用^

echo "scale=5;1.1^2"|bc

使用sqrt开平方

echo "scale=5;sqrt(3)"|bc

bc还提供进制转换功能

obase 指定输出的进制,ibase 指定输入的进制

echo "obase=16;ibase=2;10101010"|bc

(3)until循环 ------------ 条件不成立继续循环,成立结束循环

语法格式:

until 条件/命令 
do

....

done

10.select语法

将所有的内容列出来供用户选择

语法:

select 变量 in 一组数据

do

...

done

11.shell中的函数

定义语法:

函数名()

{

.....

}

调用函数直接写函数名即可

函数可以有返回值,使用return来指定返回值,在函数调用语句后使用$?获取返回值

调用函数时也可以给函数传数据,直接把要传入的数据写到调用语句之后

:是一个什么都不做的命令,可以把一个表达式变成一条完整的命令

12.shell编程中的变量

在函数中定义变量默认也是本shell变量,可以在本shell中使用

REPLY变量是一个全局变量,记录内容是用户上次输入的值

可以在函数中定义本地变量,这种变量只能在本函数中使用

语法:

local 变量名

全局变量 --------- 本shell和子shell可以访问

本shell变量 ------ 本shell可以访问

本地变量 --------- 本函数可以访问

13.几个命令的补充

sort命令 --------- 对给定的内容(文件)进行排序

uniq命令 --------- 去掉文件中重复的行

seq命令 ---------- 产生给定的序列

    seq 起始数字 间隔大小 结束数字

14.正则表达式

正则表达式用于进行字符串匹配

* ---------- 通配符,代表任意多个任意字符

? ---------- 通配符,代表1个任意字符

^xxx -------- 匹配行首

xxx$ -------- 匹配行尾

[] --------- 匹配范围

{} --------- 匹配的次数     {最少,最多},大括号要用\转义
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值