目录
文章目录
前言
记录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 值1 值2 值3 …
do
程序
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 指定需要排序的列
本文介绍了Shell脚本的基础知识,包括如何使用脚本、变量的定义与操作、条件判断和流程控制、系统函数如read、basename和dirname,以及常用的文本处理工具如cut、sed和awk的用法。

被折叠的 条评论
为什么被折叠?



