LinuxC高级day03(Shell脚本)

【1】Shell脚本

1》Shell脚本基础概念

1> 概念

Shell使用方式:手动在命令行下命令或用Shell脚本 

Shell脚本本质:Shell命令的有序集合    扩展名最好以 .sh 结尾,见名知义  也可以没有

Shell既是应用程序,又是一种脚本语言

解释型语句:不需要编译,解释一句执行一句 Python、Shell脚本

编译型语句:需要编译器gcc、g++进行编译,比如C语言

2> Shell脚本的创建和执行 

新建一个Shell脚本文件: touch  xx.sh

在脚本文件里面第一行必须是  #!/bin/bash     意思是用/bin/bash来进行解释执行

执行方式:

1)先更改Shell脚本的执行权限 使其具有执行权限  chmod  权限  xx.sh

2)执行 :./xx.sh

2》变量 

1> 用户自定义变量

变量一般用大写

赋值操作用 =  ,但是 = 左右两边不能有空格 

引用变量时要在变量前加 $ 

2> 位置变量 

 $0或 ${0}表示命令行的第一个参数,也就是脚本名的参数  ./xx.sh

 $1、 $2....就是剩下的第二个、第三个命令行参数,以此类推

 $# 表示所有命令行参数的个数(除了第一个命令行参数)

 $@ 或 $* 表示所有命令行参数(除了第一个命令行参数)

 3> 预定义变量

$? 表示前一条命令的退出状态   0为真   非0为假 

$$  表示正在执行的进程的进程号 

4> 环境变量 

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置、系统文件夹位置

例:

HOME:/etc/password 文件中列出的用户主目录

PATH:Shell搜索路径,就是一系列目录,当执行命令时,Linux就在这些目录下查找

 3》功能语句

1> 说明性语句

以#开头是注释语句,起解释说明的作用

2> 功能性语句 
read

功能:从标准输入读入一行数据,并赋值给后面的变量

格式:read  变量1  变量2  变量3

           把读入行中的第一个数据赋值给变量1,第二个数据赋值给变量2 以此类推,当只剩最后一个变量但还有很多数据时,会把剩余数据都赋值给最后一个变量

read -p "提示语句" 变量列表 :可以将提示语句输出,同时输入变量

        

expr

格式: expr  表达式

注意:表达式符号之间必须用空格,元素要用$ 引用 可以直接输出结果,不过脚本里一般结合命令置换符把结果重新赋值给其他变量

算术运算符命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和取余数(%)等操作, 小括号前面也要加\。

test 

可测试对象:字符串 整数 文件属性 每种测试对象都有若干测试操作符

字符串测试:

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

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

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

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

整数的测试:

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

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

test a -gt b           测试 a 是否大于 b greater than

test a -ge b          测试 a 是否大于等于 b greater equal

test a -lt b            测试a 是否小于b litter than

test a -le b           测试a 是否小于等于b litter equal

文件属性的测试:

test -d name 测试name 是否为一个目录

test -f name 测试name 是否为普通文件

test -e name 测试文件是否存在

3> 结构性语句 
if语句

基本结构:

if 条件
  then
     命令表1
  else
     命令表2
fi

多路分支结构:

if 条件1 
   then 
     命令表1 
   elif 条件2 
     then 
       命令表2 
fi

嵌套结构:

 if 条件1 
   then 
     if 条件2 
    then 
       命令表1 
     fi 
else 
   命令表2 
fi

结合test判断

结合操作符[],但是[]前后都需要空格

 case语句

格式:

case 变量 in 
模式1) 
   命令表1 
   ;; 
模式2) 
   命令表2 
   ;; 
*)
   命令表n 
   ;; 
esac

for循环语句

格式:

for 变量名 in 单词表 
do 
    命令表 
done

for语句的几种书写格式:

1)for i in 1 2 3 4 do....done :     变量i从单词表中取值

2)for i do...done:   变量i从命令行取值,可以省略in单词表

3)for i in {1..10} do...done:      变量i从1-10个数中取值

4)for ((i = 0; i < 10; i++)) do...done:       书写格式类似c语言

 while循环语句

格式:

​​​​​​​ while 命令或表达式 
do 
    命令表
done

循环控制语句 

break n :结束 第 n 层循环 (从内层循环开始算第 1 层循环)

continue n :结束第 n 层的本次循环,继续下一次循环

 补充操作符

-o 或运算 例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true

-a 与运算 例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false

! 非运算 例如 [ ! false ] 返回 true

&& 逻辑与 例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false

|| 逻辑或 例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

| 位或 例如 echo $[2|2] &位与 例如 echo $[2&1]

4》数组 

数组的赋值
1. arr = (1 2 3 4 5)

2. arr = ($1 $2 $3....)

3. read a b c 
   arr = ($a $b $c)

4. read -a arr
 数组的调用
${arr[i]}        #引用数组元素,数组元素下标从 0 开始到 n-1 结束
arr[i] = 10      #对数组元素重新赋值
${arr[@]}        #遍历数组
${#arr[@]}       #数组元素个数

 5》函数

函数定义方式
函数名() 
{ 
命令表 
} 

function 函数名()
{ 
命令表
}
 函数调用
函数名  参数列表

函数内 $1 $2 表示的时传递给函数的参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值