Shell脚本语言概述

本文介绍了Shell脚本的基础知识,包括如何使用脚本、变量的定义与操作、条件判断和流程控制、系统函数如read、basename和dirname,以及常用的文本处理工具如cut、sed和awk的用法。

目录


前言

记录Shell脚本语言的学习过程

一、Shell脚本

1、硬件中有Linux内核,shell脚本可以操作内核,外层应用程序调用shell命令;
2、shell是命令行解释器,接收应用程序命令,调用操作系统内核;
3、Linux提供的解析器,一般用的是/bin/sh,/bin/bash

二、脚本入门

1、#!/bin/bash 脚本以此开头,表示制定解析器为/bin/bash
2、脚本的执行方式:bash或者sh+脚本的相对路径或者绝对路径;
如果权限够的话,也可以./脚本相对路径或者脚本绝对路径执行;
如果没有权限,要修改使其具有+x可执行权限,chmod 777 hello.sh
两种执行方式:第一种是bash解析器帮助执行脚本,脚本本身不需要执行权限;第二种脚本自己执行,所以需要执行权限;

三、Shell中的变量

1、常见系统变量

系统变量

$HOME:家目录
$PWD:当前目录
$SHELL:默认解析器/bin/bash
$USER:当前用户

2、自定义变量

变量定义:变量=值 例如:A=1(不能有空格)
撤销变量:unset 变量 例如:unset A 则A这个变量被删除
静态变量:readonly 变量=值 (该变量只读,不能unset,重启后消失)
升级变量为全局变量:export 变量(此时该变量可以被其他的shell程序识别并使用)
命名规则:字母数字下划线,不能数字开头,环境变量建议大写;bash中变量默认字符串类型,不能进行数值运算;变量值有空格应该用双/单引号括起来。

2、特殊变量

特殊变量

$n:n为数字,$0是脚本名称,$1, $2…是给脚本输入的第1,2,…个参数,十以上用花括号括起来,例如${10};
$#:用于获取所有输入参数的个数,常用于循环;
$*:获取命令行中的所有参数,把所有的参数看成一个整体;
$@:也是获取所有参数,不过把每个参数区分对待;
$?:最后一次执行命令的返回状态,正常则返回0,不正常则返回非0

四、运算符

基本语法
(1)、$((运算式)) 或者 $[运算式]
(2)、expr +、-、*、/、% (加、减、乘、除、取余)(注意:expr运算符间必须有空格,例如:expr 2 + 3)
(对于用expr进行运算时,用ESC按键下面的这个符号将需要优先级算的括起来,比如:expr expr 2 + 3` * 4,就类似于(2+3)*4)

1、条件判断

语法

[ condition ]
 注意:condition前后各有空格,否则报错;
		condition非空即为true,否则才为false;[ fvfv ]为true,[]为false;

常用条件判断:
整数比较:

=:字符串比较
-lt:小于;	 	-le:小于等于;
-eq:等于;	-ne:不等于;
-gt:大于;		-ge:大于等于;

按照文件的权限进行判断

-r:有读的权限
-w:有写的权限
-x:有执行的权限

按文件类型进行判断

-f:文件存在且是一个常规文件file
-e:文件存在existence
-d:文件存在且是一个目录directory

多条件判断

&&:前一条判断正确时才进行后面的判断
||:前一条判断失败时才进行后面的判断

2、流程控制

if判断

语法

if [ 条件判断 ];then
		程序
fi
或者
if [ 条件判断 ]
then
		程序
fi
注意:if后面必须有空格。
例如:(其中的elif就是else if

在这里插入图片描述

case判断

语法

case $变量名 in
	“值1)
		程序1
	;;
	“值2)
		程序2
	;;*)
		默认程序
	;;
	esac
	注意:case行尾必须是in;两个分号相当于break*)相当于default

在这里插入图片描述

for循环

语法

for(( 初始值;循环控制条件;变量变化 ))
do
	程序
done

例如:
B=0
for(( A=0;A<=100;A++ ))
do
	B=$[$B+$A]
done
echo $B

或者

for 变量 in 值123do
	程序
done

while循环

语法

while [ 条件判断 ]
do
		程序
done

五、系统函数

read读取控制台输入值

基本语法:read(选项)(参数)
选项:-p:制定读取值时的提示符;
	   -t:制定读取值时的等待时间;
参数:变量:制定读取值得变量名;
例如:
	read -t 7 -p “Enter your name in 7 seconds ” NAME
	echo $NAME

basename函数

基本语法:basename [string/pathname] [suffix]
功能:basename会删除掉string或者pathname中前缀包括最后一个’/’字符,然后将字符串显示出来;如果suffix不为空,则string或者pathname中的suffix会被删掉;
例如:
	basename /home/adam/111.txt
		执行后打印:111.txt
	basename /home/adam/111.txt .txt
		执行后打印:111

dirname函数

基本语法:dirname 文件绝对路径
功能:返回文件的路径(除去文件名)

在这里插入图片描述

六、自定义函数

语法

[ function ] funname[()]
{
	Action;
	[return int;]
}
注意:
必须在调用函数之前声明函数,shell脚本朱行运行,不会提前编译。
函数返回值只能通过$?系统变量获得,可以加return返回,如果不加return,将已最后一条命令运行结果作为返回值。

在这里插入图片描述

Shell工具

cut

从文件的每一行剪切字节、字符、字段并将这些字节、字符和字段输出。

基本用法:cut [选项参数] filename
选项:
-f 列号,提取第几列;
-d 分隔符,按照指定的分隔符分割列;(默认分隔符是制表符)
cut -d “ ” -f 1,2 111.txt
表示对111.txt文件的每一行按照“ ”空格进行分割,分割完后取第1,2列。
ifconfig eth0 | grep “inet addr” | cut -d : -f 2 | cut -d “ ” -f 1
通过过滤、多级剪切,得到eth0网口的IP地址。

sed

一种流编辑器,一次处理一行内容,处理时把当前处理的行存储在临时缓冲区,即模式空间,接着用sed命令处理缓冲区内容,处理完成把内容送往屏幕。接着处理下一行,直到文件末尾。文件内容未被改变。

	sed [选项参数] ‘command’ filename
	选项参数:
	-e 直接在指令列上进行sed动作编辑
	命令功能:
	a	新增,a的后面接字符串,在下一行出现;
	d	删除;
	s	查找并替换;

awk

把文件朱行读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern : 表示awk在数据中查找的内容,即匹配模式;
action : 在找到匹配的内容是执行的一系列命令。
选项参数:
-F :指定输入文件拆分分隔符;
-V :赋值一个用户定义变量;

sort

将文件进行排序,将排序结果标准输出。

sort(选项)(参数)
选项:
-n	按照数值大小排序
-r	以相反的顺序排序
-t	设置排序时所用的分割字符
-k	指定需要排序的列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值