02-Shell编程

shell脚本

1.定义

1.shell命令的有序集合
2.shell脚本是解释型语言,每次修改后可直接执行
3.shell脚本的运行方式:给脚本文件添加可执行权限,通过路径/文件名的方式进行运行

$ chmod u+x 1.sh
$ ./1.sh

2.shell输入输出

命令功能
echo输出
read读取

2.1 echo

默认带有换行功能

-n输出内容的时候不换行
-echo -n “string” #echo -n “hello world”
-e解释转义字符
-echo -e “string\n\t”

echo输出内容的时候需要加上双引号

echo -ne "\tstring\n"
	string

2.2 read

-a将变量读入到数组中
-read -a 数组名 #read -a arr
-n num读取num个字符后结束
-read -n num a #read -3 a
-p 字符串跟提示信息
-read -p “Please input>” 变量名
-s静默模式,输入的内容不会再终端回显
-read -s C
-t seconds等待多少秒后如果没有输入自动结束
-read -r 3 D

3.shell变量

环境变量预定义变量位置变量自定义变量

3.1 环境变量

PATH、PS1

$ env #查看所有的环境变量

修改环境变量

修改当前用户~/.bashrc
修改所有用户/etc/environment
-/etc/bash.bashrc
-/etc/profile

PATH变量的概念

1.储存系统可执行命令的所在路径,通常用的绝对路径
2.提供了对系统命令搜寻的遍历

修改

PATH=${PATH};添加的路径
引用原有路径的基础上添加新的路径

3.2 预定义变量

概念:
1.是由shell程序提供的内置变量
2.用来储存shell程序运行过程中的状态信息
3.不需要设置,只能引用
使用:

$$储存当前进程的进程号信息
$0储存当前进程名信息
$?储存当前命令的返回值信息,成功返回0,失败返回非0
$!储存最后一个后台进程的进程号信息

3.3 位置变量

$1-$9位置1-9
${10} ${11}十以后的位置
shift剪切、将后面的位置变量前移一个位置
$#所有位置变量的个数,不包含脚本文件
$*所有位置变量的个数,不包含脚本文件
$@所有位置变量的值,不包含脚本文件
-注:$ *和 $@大多数情况下没区别,如果有双引号的时候, $ *将所有的参数当做整体处理,$@每一个参数还是独立的

3.4 自定义变量

变量没有数据类型,通常可以直接使用

x=1
x=2

变量的引用

$变量名

删除变量

unset 变量名

4.shell数组

只支持一维数组,没有多维数组的概念

4.1 数组的定义

数组名=(value1 value2 value3)
注意
1、数组的元素个数不需要指定
2、数组中每一个元素使用空格分隔
3、所有元素使用括号括起来
4、arr=(11 22 33 44 55) 长度为5
5、数组长度可变
6、shell数组可以只针对某几个成员进行初始化
arr=([0]=11 [3]=33 [5]=55) 长度为3
7、arr=(1 “hello” ‘abc’)

4.2 数组的访问

${数组名[下标]}------从0开始

${arr[0]}   #取arr数组第0个元素的值
输出数组的所有元素${数组名[*]}
-${数组名[@]}
统计数组中元素的个数${#数组名[*]}
-${#数组名[@]}
统计数组中某一个元素的字符个数${#数组名[下标]}

4.3 两个数组的拼接

arr_new=(${arr_old1[*]} ${arr_old2[*]})

4.4 删除数组中的某一个成员

unset 数组名[下标]  #删除数组中的某一个成员
unset 数组名       #删除整个数组

5.通配符

*代表任意多个字符(0或多个)
?代表任意一个字符(必须要有一个字符)
[a-z]显示a-z之间的内容,必须要有一个位置
[a,c]匹配括号中出现的字符
[^a-z]除了中括号中出现的内容,其他的显示 #scanf("%[^\n]",arr);

6.shell运算符

((表达式))用于整型数的运算
$[表达式]用于整型数的运算
expr可以进行整型数和字符串的运算

6.1 (()) 算术运算操作符

可以使用 $获取表达式的结果 $((表达式))
(())中使用变量可以不加 $,自动解析变量
(())表达式可以很复杂
$((2*(i-1)+1))

6.2 $[ ]

1.中括号内可以有多个表达式,取最后一个表达式的结果作为输出
2.表达式中如果有变量,可以使用$也可以不适用
3.只支持整型数运算
4.整个表达式不能单独出现,需要使用变量接收结果
$ [a+b] 错误 c=$[a+b] 正确

6.3 expr运算

1.可以将结果主动输出到终端
2.expr在引用变量的时候需要加上$符号
3.expr在执行运算的时候,运算符的左右两边一定要有空格
4.expr不支持++、–运算
5.如果要将expr的计算结果赋值给一个变量,必须对整个表达式使用命令置换
a=expr b + c 这里有两个`包围起expr运算,但是打不出来
6.进行特殊运算需要转义
*乘法 (左括号 ) 右括号 <小于 >大于
7.expr不能进行幂运算

6.4 字符串的运算

mathexpr match string regexp
~在string中匹配regexp字符串,如果匹配成功返回匹配的个数,不成功返回0,只能在string字符串的开始位置匹配
indexexpr index string chars
~查找chars字符中最先在string中出现的位置,返回字符的位置(从1开始)
substrexpr substr string pos length
~对string字符串从pos位置开始截取,截取length个长度。

~ n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值