Linux:shell脚本笔记

介绍

shell是直接基于操作系统的一门脚本语言,是用C语言编写的一个工具。
shell在工作中的作用:

1.批量的运行Linux命令

2.可以去运行大数据平台的工具以及数据库的脚本,实现脚本的动态传参

编写shell脚本

步骤一

使用vim + 文件名来新建一个shell脚本文件(...sh)

步骤二

在新文件的第一行要加上文件运行的命令来源:

#!/bin/sh

#!/bin/bash

步骤三

运行脚本 有三种基本方法

方法 说明
sh 文件名
bash 文件名
文件路径 前提是需要给文件赋予x的执行权限

语法基础操作

变量定义

1.shell脚本默认所有变量都是字符串,定义方法同python,变量值里有空格必须加引号,否则不用加

2.在定义变量的时候,不能随便添加空格,整个shell脚本对于空格的使用都是非常严格的

3.在读取变量的时候,要使用{变量名} 或者变量名 来对变量进行读取和引用。

输出语句

echo 要输出的内容

可选参数:-e:字符串里面的 \ 会被识别为转义字符

\n 换行符 \t 制表符 \c 连接符

输入语句

read -p "提示语句" 变量名字

给句子添加注释

在shell中如果多行注释,那么可能会因为一些符号导致注释出错或者失效,所以在shell中我们通常都是使用单行注释

在行首添加 # 即可

数据类型和基本操作方法

字符串

单引号和双引号的区别:单引号无法识别与解析字符串中的变量

基本操作方法

方法 说明
${#变量名}返回字符串长度
${变量名:start:len} 截取字符串
${变量名/old/new} 只替换匹配的第一个数据
${变量名//old/new} 替换所有数据

数字

整数运算

格式 说明
$[ ] echo \[n1-n2\]:变量前需要加用于识别
$() echo ((n1+$n2))
expr 属于Linux的命令,嵌套时注意加上反引号,例:echo expr $n1 + $n2
let 使用let语句实现数字计算,例:let c=n1+n2 echo $c;let语句不能直接用echo输出;特别的乘法符号前要加上转义符

小数运算

加法和减法

"变量+变量"|bc
乘法和除法

需要定义精度

"scale=小数精度;变量;+变量"|bc 这是个通用格式

数组

数组是很多不同的数据的一个集合体,中间使用空格来隔开数据

例: t=(100,22,3.4,hello) 默认都是字符串
数组的读取

${数组名} 只会读取数组的第一个元素
${数组名[*]} 读取数组的所有数据

注:数字的长度查询和元素内容的截取,和字符串的语法相同。

--在数组中查询指定序号的数据

${数组名[序号]}

--替换数据

数组名[seq]=value

--新增数据

数组名[数组长度]=value

逻辑部分

判断分支

if [ 条件判断 ]

then;

执行语句

elif [条件判断]

then;

执行语句

else

执行语句

fi
第二种形式

f test 条件判断

then

执行语句

elif test 条件判断

then

执行语句

else

执行语句

fi
数字的判断

逻辑 符号
大于 -gt
小于 -lt
大于等于 -ge
小于等于 -le
等于 -eq
不等于 -ne

字符串的判断

逻辑 符号
等于 ==
不等于 !=
并且 -a
或者 -o

循环控制

for循环

使用{}表示循环的范围,这种方法定义简单,但是不能用变量来进行括号内数据的替换。

bash 复制代码
for i in {1..10}				#开始..结束
do
  echo 变量是:$i
done

for i in {1..10..2}			#开始..结束..步长
do
  echo 变量是:$i
done

for i in {10..1}
do
  echo 变量是:$i
done

for i in {10..1..2}
do
  echo 变量是:$i
done

使用Linux的seq命令进行范围的表达:

bash 复制代码
for i in `seq 1 10`			#开始  结束
do
  echo 变量是:$i
done

for i in `seq 1 2 10`		#开始 步长 结束
do
  echo 变量是:$i
done

for i in `seq 10 -1 1` 	#从大到小,步长要写成负数
do
  echo 变量是:$i
done

min=1
max=10
for i in `seq $min $max`
do
  echo 变量是:$i
done

使用数组的内容进行循环

bash 复制代码
fruits=(apple orange banana)
for f in ${fruits[*]}
do
  echo 变量是:$f
done

使用其它系统命令进行循环

bash 复制代码
for i in `ls /opt`
do
  echo 文件名字是:$i
done

使用类C语言的方式进行循环

bash 复制代码
for ((i=1;i<=10;i++))
do
  echo 变量是:$i
done

for ((i=1;i<=10;i+=2))
do
  echo 变量是:$i
done

while循环

语法

whlie [循环条件]

do

执行语句

done
练习:

有一张纸的厚度是1毫米,珠穆朗玛峰高度是8848米,试问纸折几次厚度会超过山

bash 复制代码
#!/bin/bash
zhi=1
mount=8848000
count=0
while [ $zhi -lt $mount ]
do
 let zhi=zhi * 2
 let count++
done
echo "$count:$zhi"

函数

定义函数

语法

function 函数名(){

代码块

return 返回值

}

  • 不写参数,小括号是为了与其他语言匹配
  • 返回值不是必须的,shell的函数中,返回值只能返回 0-255 的数字,这个数字的返回一般是用来给调用者去判断函数的执行是否成功的。
  • 可以把linux的每一个命令,都当成系统定义好的函数来看待,例如 touch a.txt,touch本身是一个函数,a.txt是传递给函数的一个参数值。所以命令都有返回值,如果返回值是0,就表示操作成功,其他数字都是失败。
  • $? 是返回值
  • $* 是所有的参数
  • $# 是参数的数量
  • $数字 是指定位置的参数,$1 $2
  • 在文件里面,调用函数的时候,参数也可以写成 $ 的形式表示这里不定义参数,这里也是在接受参数,参数是在调用文件的时候,写在文件名字后面的。例如: sh t3.sh 1 2 3
相关推荐
GQH10004 分钟前
运算符、分支语句
linux·c语言
zundujia16 分钟前
C语言进程
linux·运维·服务器
这河里吗l17 分钟前
Java每日面试题(JVM)(day15)
java·开发语言·jvm·笔记·后端
笑鸿的学习笔记18 分钟前
git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样
笔记·git·elasticsearch
Y_3_727 分钟前
Redis 中 String 字符串类型详解
linux·数据库·redis·缓存·bootstrap
_shenash39 分钟前
Linux C# DAY3
linux·运维·服务器
世俗ˊ1 小时前
Docker学习笔记
笔记·学习·docker
媛媛要加油呀1 小时前
web功能测试总结(自用分享)
运维·服务器·前端·功能测试
极地星光2 小时前
使用脚本自动化管理外部Git仓库依赖
运维·git·自动化
xjjeffery2 小时前
网络基础概念和 socket 编程
linux·c语言·网络·后端