shell脚本知识点 回顾

发布于:2022-12-05 ⋅ 阅读:(534) ⋅ 点赞:(0)

一、shell 脚本

1.编程步骤

1、创建 .sh(脚本)文件
2、给脚本文件赋 执行权限(chmod u+x 脚本文件名)
3、执行脚本文件(./脚本文件名)

注意:

1.执行脚本文件时如果使用./的形式执行,是在别的终端执行,然后把结果反馈到当前终端上,如果想要直接在当前终端执行,可以使用source 脚本文件名的形式
2.一个命令结束了一定要以空格或者 ; 隔开

2.shell 脚本中的变量

1)变量的性质

1、shell脚本中的变量不需要大家定义,直接进行赋值即可

2、 变量赋值用=,‘=’两边不要加空格

3、shell脚本认为所有变量的数值都是字符串类型

4、shell脚本变量的数值的访问方式 $变量名或者${变量名}

2)变量赋值

var=1234 #把字符串1234赋值给变量var
var1='hello world' #如果赋值的字符串有空格则需要双引号或者单引号
var2=$var #把变量的数值赋值给另外一个变量
var3="$var $var1 $var2" #把多个变量的数值赋值给一个变量用“”
echo ${var}
echo ${var1}
echo ${var2}
echo ${var3}

3)shell 脚本中命令行传参

1.位置变量 接收 命令行终端的参数

2.输出命令行传来的所有参数,可以使用$@或者$*,不包括执行的脚本名

3.使用$#来表示命令行终端传来的参数的个数

4.可以在在字符串中间+‘\n’,将后面的内容换行显示。  
   -e参数表示可以识别输出内容中的换行符

4)特殊变量

       清除变量 unset        只读变量 readonly

二、shell 脚本类型、命令

1.shell 脚本里的数组

        数组定义格式          数组名=(成员列表)

        单个成员的赋值        数组名={[下标]=数值

性质

a.访问数组单个成员   ${数组名[下标]}

b.计算某个成员的长度  ${#数组名[下标]}

c.访问数组所有成员   ${数组名[@]}或${数组名[*]}

d.计算数组成员个数   ${#数组名[@]}或${#数组名[*]}

e.shell脚本里数组的追加和清空

        #数组成员的追加
        arr=(${arr[@]} 你好 世界)
        echo ${arr[@]}

        #数组的清空
        unset arr
        echo ${arr[@]}

2.shell 脚本里的数据运算

1.(()) 只能实现算术运算

a. (())运算时,内部变量 $和空格 可加可不加

b. (())赋值时,前面加上$,再赋给变量

c. (())自增运算时,变量前不加$

d. 变量=$((表达式1,表达式2,表达式3)),从左向右执行,最后的表达式的值赋给变量

e. 循环实现

2. $[ ] 只能实现算术运

a.  $[ ]运算时,内部变量 $ 和 空格 可加可不加

b.  $[ ]运算结果,需要变量接收或者直接输出,否则会报错

c.  $[ ]自增运算时,变量前不加 $,否则会报错

d.  变量=$[表达式1,表达式2,表达式3],从左向右执行,最后的表达式的值赋给变量

e. 不能实现循环 

3. expr 算术运算、字符串相关操作

1. expr 运算符两边加空格,不然无法返回 运算结果

2. expr 使用时,变量前加 $

3. 命令置换符 ` ` 将命令输出结果赋值给 变量

4. expr 乘法运算 \*(使用转义,否则跟通配符冲突,会报错)

5. 求字符串长度:  expr length $变量名

6. 字符串中查指定字符的位置: expr index $变量名 "目的字符"

7. 字符串 裁剪:expr substr $变量名 起始位置 裁剪长度

8. 字符串 匹配:expr match $变量名 “目标字符串”

3.shell 脚本里的输入输出

1.输入 read

1. read 参数 变量名

2. read 参数 变量列表

注意:在进行多个变量数值输入时,会以空格区分字符串,如果最后输入的字符串个数大于变量的个数,会把剩下的字符串都放在最后一个变量里面

3. read -p "打印提示信息" 变量名

4. read -a 数组名

 5. read -n 变量名 限制输入字符个数

6. read -s 变量名  隐藏回显

7. read -t 变量名  输入时长限制(秒)

2.输出 echo 参数 输出目标

参数 -n:设置输出不换行

参数 -e:识别 字符串中间的 转义符

4.shell 脚本里的条件判断(真为0,假为1)

1. 数字判断     -eq 等于;-ne 不等于

                        -gt 大于 ;-ge 大于等于;-lt 小于;-le 小于等于

2. 逻辑判断   逻辑与 -a  ;逻辑或 -o  ;逻辑取反 !

3.判断 字符串

        -z  判断字符串是否为空   //为空条件满足

        -n  判断字符串是否不为空   //不为空条件满足(必须加 “ " ,否则判断不准)

4.判断 文件类型

         -e 判断文件是否存在     //存在条件满足
        -s 判断文件是否存在,并是否为空 //不为空满足
        -b 判断文件是否存在,并是否为块设备文件
        -c 判断文件是否存在,并是否是字符设备文件
        -d 判断文件是否存在,并是否是目录文件
        -f 判断文件是否存在,并是否是普通文件
        -L 判断文件是否存在,并是否是链接文件
        -S 判断文件是否存在,并是否是套接字文件
        -p 判断文件是否存在,并是否是管道文件

5.判断 文件权限

        -r:判断是否有读权限  //有权限条件满足
        -w:是否有写权限
        -x:是否有执行权限

三、shell 脚本语句

1.if 判断语句

格式1:
#if test 判断条件
if [ 判断条件 ]
then
语句1
else
语句2
fi
如果条件满足执行语句1,否则执行语句2

格式2:
if [ 判断条件1 ]
then
语句1
elif [ 判断条件2 ]
then
语句2
...
else
语句n
fi
满足哪个判断条件就进入哪个语句块

2.case 判断语句

格式:

case  $变量名  in

匹配项1)

语句1

;;

匹配项2)

语句2

;;

。。。

*)

语句n

;;

esac

1.可以用[x-y]表示匹配的一个范围

2.[字符列表]可以用来匹配在[]内部的任意字符,注意中英文切换

3.shell 脚本里的 while 循环语句

eg:
#!/bin/bash

i=0
sum=0
while [ $i -le 100 ]
do
((sum+=i))
((i++))
done
echo $sum

四种死循环:

while [ 1 ]、while [ 0 ]
while :
while [ "a" == "a" ] 
while true 

4.shell 脚本里的 for 循环语句

1.c语言风格

#!/bin/bash

i=0
sum=0
for((i=0;i<=100;i++))
{
((sum+=i))
}
echo $sum

2.shell脚本风格

#!/bin/bash
#指定一个操作路径

path=/home/ubuntu/1
#在当前路径下创建一个文件夹1
mkdir ./1
#循环遍历指定的路径
for var in `ls $path` 
do
#进行文复制
cp -r "$path"/$var ./1
done

注意:如果把in和单词列表省略,在命令行传单词列表参数

break:结束当前循环
continue:结束当前循环进入下次循环
注意:break和continue后面可以加一个数字,表示跳出n层循环
break n  == contine n+1
sleep:睡眠命令
sleep n:睡眠n秒

5.shell 脚本里的 select 循环语句

特点:

1. 增强了人机的交互,一般select是死循环,没办法结束,只能强制结束,或者遇到break结束。
2. select循环一般和case语句联合使用。

6.多行注释

1.
<<字符串
注释内容
字符串

2.
:‘
注释内容

四、脚本函数

性质
1.shell脚本里面声明函数使用function
2.shell脚本函数内部返回值没有数据类型
3.shell脚本函数没有参数列表,传参使用位置变量传参
4.shell脚本函数体也是在{}内部
5.shell脚本通过ruturn去返回的数值只能在0-255范围内部,如果想要 返回超过这个范围的数值,      需要echo实现
6.函数正常不会执行,被调用时函数才执行

1.脚本函数调用

格式:

函数名 参数1 参数2 参数3

#!/bin/bash
function aaa()
{
#$0固定是脚本名
echo $0

#$1是函数传递的第1个参数
echo $1
echo $2
}

#函数的调用
aaa hello nihao hahha

2.返回值的获取

1.通过return返回返回值,$?获取返回值:这种方式只能获取0-255范围的数值

2.可以通过全局变量获取返回值,在shell脚本里面变量属性默认是全局可用的,如果想变成程局部的,得有一个标识符声明local
local 变量名:声明变量为局部变量

3.通过echo返回返回值

本文含有隐藏内容,请 开通VIP 后查看