IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [Shell编程]-shell入门学习 -> 正文阅读

[系统运维][Shell编程]-shell入门学习

Shell入门学习

参考视频链接

概述

Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止,编写一些程序
Linux运维中需要编写Shell程序来进行服务器的管理;编写Shell脚本可以用于程序或者服务器的维护,如定时备份数据库的脚本

入门

编写Shell脚本

新建并保存一个.sh文件(Shell脚本通常都以sh作为后缀名,但不是必须的)
脚本文件必须以#!/bin/bash开头
脚本文件中每一个语句结尾不需要加分号
'#'用于单行注释;用":<<!“以及”!"包含内容进行多行注释,且这两个符号都要自己单独占一行:

:<<!
注释内容
!

hello world 示例:

#!/bin/bash
echo "hello world"

执行Shell脚本

方式1:输入脚本的绝对路径或相对路径。首先要赋予脚本文件可执行权限
方式2:sh 脚本文件路径,不用赋予脚本可执行权限可以直接执行。这种方式不推荐

变量

Shell中的变量分为系统变量和用户自定义变量
系统变量如$HOME,$PWD,$SHELL,$USER,$PATH等等,如echo "PATH=$PATH"
使用set命令可以查看当前Shell中所有变量
定义变量变量=值
撤销变量unset 变量

A=100
echo "A=$A" #输出 A=100。用'$'来引用变量,或者加上大括号:${变量名}
unset A
echo "A=$A" #输出 A=

声明静态变量readonly 变量(静态变量不能unset,脚本中有unset静态变量的操作的话执行脚本时会报错)

变量定义时的规则

1.变量名可以由字母,数字,下划线组成,但不能以数字开头(会报错)
2.等号两侧不能有空格
3.变量名称一般习惯为大写

将命令的返回值赋给变量

1.A=`ls - la`,反引号,运行里面的命令,并把结果返回给变量A
2.A=$(ls - la),等价于反引号;MYDATE=$(date),获取日期然后赋值

环境变量

在配置文件(如/etc/profile文件)中设置环境变量,可在其它地方引用
export 变量名=变量值,将shell变量输出为环境变量
source 配置文件,让修改后的配置信息立即生效
$变量名,取环境变量的值

位置参数变量

当执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如执行./myshell.sh 10 20命令时,想在myshell.sh脚本文件中获取10或20这些命令行中的参数
具体使用方法是在shell脚本中使用下面这些符号:
$n,n为数字,$0表示命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号括起来,如${13}
$*,表示命令行中的所有参数,把所有的参数看成一个整体
$@,也表示命令行中的所有参数,不过它把每个参数区分对待
$#,表示命令行中所有参数的个数

预定义变量

预定义变量就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
$$,当前进程的进程号(PID)
$!,后台运行的最后一个进程的进程号(PID)
$?,最后一次执行的命令的返回状态。如果它的值为0,说明上一个命令正确执行;如果为非0(具体是哪个数有命令自身决定),则说明上一个命令执行不正确

运算符

语法形式:
$((运算式))$[运算式](推荐)
`expr m + n`,expr中运算符之间要有空格;用反引号括起来,且反引号与前面的等号间不能有空格
`expr m - n`
`expr \*` 乘法,`expr /` 除法,`expr %` 取余
乘法运算’*'前的反斜杠用于转义,expr中如果有左右括号的话也需要转义

条件判断

[ condition ],注意condition前后要有空格
非空返回true,可使用$?验证,0为true,>1为false;[]返回false

条件判断符号

以下符号左右都要有空格

两个整数的比较

-lt小于;-le小于等于;-eq等于;-gt大于;-ge大于等于;-ne不等于
=字符串的比较。比较结果可以用 ! 取反

按照文件权限进行判断

-r有读的权限;-w有写的权限;-x有执行的权限
将要判断的文件放在符号右边

按照文件类型进行判断

-f文件存在且是一个常规的文件
-e文件存在
-d文件存在且是一个目录
将要判断的文件放在符号右边

流程控制

if语句

if [ 条件判断式 ];then
	其它语句
fi

或者

if [ 条件判断式 ]
	then
		其它语句
	elif [ 条件判断式 ]
		then
			其它语句
fi

条件判断中中括号跟条件判断式之间必须有空格;推荐第二种方式

case语句

case $变量名 in
	"值1")
		#如果变量值为值1,执行这里的语句
	;;
	"值2")
		#如果变量值为值2,执行这里的语句
	;;
	......
	*)
		#如果变量的值不是上面列举的值,执行这里的语句
	;;
esac

for语句

for 变量 in 值1 值2 值3...
	do
		其它语句
	done

或者

for((初始值;循环控制条件;变量变化))
	do
		其它语句
	done
示例1: 打印命令行中的参数

脚本文件test.sh:

#!/bin/bash

for i in "$*"
do
	echo "num is $i"
done

执行./test.sh 10 20 30命令后,控制台会打印输出num is 10 20 30。因为$*将命令行参数当作一个整体。用$@代替$*的话,就会输出:

num is 10
num is 20
num is 30

这就是$*和$@的区别

示例2:从1累加到100输出结果
SUM=0
for((i=1;i<=100;i++))
do
	SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

while语句

while [ 条件判断式 ]
do
	其它语句
done
示例:从命令行输入一个数n,统计从1加到n的值
#!/bin/bash

SUM=0
i=0
while [ $i -le $1 ] #可以根据颜色变化判断是否需要空格,如果这里while后面的空格去掉的话while会变颜色,说明是需要空格的
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "sum= $SUM"

read读取控制台输入

read [选项] [参数]
选项:-p,指定读取值时的提示符;-t,指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:指定读取值的变量名

函数

shell中的函数有系统函数,也可以有自定义函数

系统函数举例

basename

该函数用于返回完整路径最后/的部分,常用于获取文件名
basename [path] [suffix]
basename [string] [suffix]
选项suffix为后缀,如果suffix被指定了,basename会将path或string中的suffix去掉,如 basename /home/test/test.txt .txt 会得到test

dirname

该函数返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件绝对路径
如 dirname /home/test/test.txt 会得到/home/test

自定义函数

[ function ] funName[()]
{
	Action;
	[return int;]
}

调用时直接写函数名funName。这里的中括号function以及return语句是可以不写的意思

示例:计算两个输入参数的和

#!/bin/bash

function getSum(){
	SUM=$[$n1+$n2]
	echo "和为$SUM"
}
read -p "请输入第一个数" n1
read -p "请输入第二个数" n2

getSum $n1 $n2

可以看到并没有形参

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:33:29  更:2022-02-16 13:36:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:28:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码