shell编程的基础知识笔记

文章介绍了Shell脚本的基础知识,包括脚本的作用,如创建文件夹和文件;Shell语法特点,与C语言的对比;开发过程,如创建和运行.sh文件;变量类型,如用户自定义变量、位置参数和预定义变量;以及程序和语句,如注释、算术运算、文件属性测试和选择、循环结构。此外,还提供了函数的定义和调用方法,以及几个实际应用案例。
摘要由CSDN通过智能技术生成

1 shell编程

1.1 shell脚本的作用

1.1.1 shell命令

  1. 用户主目录下创建一个文件夹 23041/day1 mkdir -p ~/23041/day1

  2. 进入到用户主目录下的23041/day1 cd ~/23041/day1

  3. 在day1目录下创建一个空文件 1.txt touch 1.txt

在这里插入图片描述

shell脚本后缀为 .sh

1.2 shell语法

1.2.1 与C语言比较

  1. 都属于计算机语言

  2. C语言是编译性语言(编译器 gcc),强类型语言,数据类型比较多

  3. shell语言是解释性语言,弱类型语言

在这里插入图片描述

1.2.2 shell开发过程

  1. 创建一个后缀名为 .sh 的文件 touch 1.sh

  2. 编辑 .sh 文件

在这里插入图片描述

#!/bin/bash 相当于C语言的头文件

  1. 修改文件权限

在这里插入图片描述

  1. 运行 .sh 文件

在这里插入图片描述

1.3 变量

1.3.1 用户自定义变量

1.3.1.1 变量名的命名规则
  1. 由数字,字母和下划线组成,首字母不能为数字

  2. 不能为关键字或保留字

  3. 尽量见名知意,尽量大写

1.3.1.2 变量名的语法规则


在这里插入图片描述

1.3.2 位置参数即命令行参数

位置参数由系统提供的参数

在这里插入图片描述

1.3.3 预定义变量

$# :包含命令行参数的个数

$@ :包含所有命令行参数

$* :包含所有命令行参数

$$:包含正在执行进程的ID号

$?:包含前一个命令的退出状态,正常退出是0(真),反之为非0值(假)

ps -ef 查看所有进程及其PID(进程号),系统时间,命令详细目录,执行者等

ps aux 除了可显示-ef所有内容之外,还可显示CPU及内存占用率,进程状态

1.3.4 环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.4 shell中的程序和语句

1.3.4.1 说明性语句 (注释)

#我是注释

1.3.4.2 功能性语句
1.3.4.2.1 键盘读入变量值read

在这里插入图片描述

1.3.4.2.2 算术运算命令 expr

expr主要用于简单的整数运算

在这里插入图片描述
在这里插入图片描述

1.3.4.3 test命令:字符串 整数 文件属性
1.3.4.3.1 字符串

s1 = s2 测试两个字符串的内容是否完全一样

s1 !=s2 测试两个字符串的内容是否有差异

-z s1 测试字符串的长度是否为0

-n s1 测试s1字符串的长度是否不为0

在这里插入图片描述

1.3.4.3.2 整数

a -eq b 测试a与b是否相等 (equal)

a -ne b 测试a与b是否不相等

a -gt b 测试a是否大于b (great)

a -ge b 测试a是否大于等于b

a -lt b 测试a是否小于b (little)

a -le b 测试a是否小于等于b

在这里插入图片描述

1.3.4.3.3 文件属性

7种文件:

  • 普通文件 d 目录文件 l 链接文件 p 管道文件 s 套接字(socket)文件 c:字符设备文件 b:块设备文件

  • -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 测试文件s1是否比文件f2更旧

在这里插入图片描述

1.3.4.4 结构性语句
1.3.4.4.1 选择结构
1.3.4.4.1.1 单分支选择结构
if 表达式
then 命令表
fi

在这里插入图片描述

1.3.4.4.1.2 双分支选择结构
if 表达式
then 命令表1
else 命令表2
fi

在这里插入图片描述

1.3.4.4.1.3 多分支选择结构
if 表达式1
then 命令表1
elif 表达式2
then 命令表2
elif 表达式3
then 命令表3
......
elif 表达式n
then 命令表n
else 命令表n+1
fi

在这里插入图片描述

case 字符串常量 in #测试字符串是否等于模式
模式1)
命令表1
;; #类似于break
模式2)
命令表2
;;
模式3)
命令表3
2.循环结构
1.for语句
1.带列表for语句
;;
......
模式n)
命令表n
;;
*) #default 表示模式都不匹配
命令表n+1
;;
esac

在这里插入图片描述

1.3.4.4.2 循环结构
1.3.4.4.2.1 带列表 for语句
for 变量名 in 列表
do
命令表
done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.4.4.2.2 不带列表for语句

1.3.4.4.2.3 类似于C语言的for语句

在这里插入图片描述

1.3.4.4.2.4 while语句
while 命令或表达式
do
命令表
done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 函数

1.4.1 定义

方式一:

function_name()
{
}

方式二:

function function_name()
{
}
#编写两个数求和的函数
function add()
{
#$1:你传进来第一个参数
#$2:你传进来第二个参数
SUM=`expr $1 + $2` #将传进来的参数进行算术运算求和
return $SUM #返回结果
}

1.4.2 函数的调用

方式一:

SUM=`functio_name 参数列表(空格隔开)`
echo $SUM
#调用add函数的时候
SUM=`add 23 45`
echo $SUM

方式二:

function_name 参数列表(空格隔开)
add 23 45
echo $? #$?表示上一个命令退出的状态

在这里插入图片描述

2 shell案例

2.1 案例1

请输入一个文件,判断它是否是普通文件,如果是普通文件,判断它是否有写的权限,

如果有写的权限,向文件中写入"hello world"

如果文件没有写的权限,给它添加写权限后,写入"hello world"

在这里插入图片描述

2.2 案例2

请输入想要下载的文件的名字,让用户确认下是否下载这个软件[Y/N/Q]。

Y(YES|Yes|yes|y|Y):正在下载软件,N:取消下载软件,Q退出

在这里插入图片描述

2.3 案例3

在这里插入图片描述

2.4 案例4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值