Linux命令行和shell脚本编程宝典 笔记

Linux命令行

第五章 使用Linux环境变量

设置环境变量

①设置本地环境变量
②设置全局环境变量 通过export将本地环境变量引导到全局环境中。

变量数组

将他们列出在圆括号中,各值以空格分隔。例如mytest=(one two three four five)
显示整个数组变量 使用星号通配符作为索引值。例如echo ${mytest[*]} (不能有空格)

Shell脚本的基础知识

第八章 基本脚本编译

反引号(`)
用于将shell输出赋值给变量(用反引号包围整个命令)

输出重定向

>
>>追加

输入重定向
<
<<内置输入重定向(命令行用)

数学计算(Bash shell只支持整数计算)

expr命令

特殊符号(如<,>)需要转义(\<,>)
bash中为变量指定数学表达式的值时,用$和[]把等式括起来
使用等号(=)为变量赋值时,等号两边不能有空格。

bash计算器(bc)

用scale=n指定结果的小数位数
bc中可以使用变量,不用加$,但在shell中使用bc则需要。
shell脚本中使用bc variable=’echo “options;expression” | bc’(其中options设置变量,如scale=4,expression为 数学表达式)

Linux退出状态码

这里写图片描述

第九章 使用结构化命令

if-then-else-fi
if-then-elif-then-fi

if test condition
then
commands
fi

if [ condition ]
then
commands
fi
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
复合条件检查
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

if-then高级特征
这里写图片描述
双方括号可以对字符串进行模式匹配。

case格式:
case $variable in
var1)
command
;;
var2)
command
;;
*)
command
;;
esac

第十章 更多结构化命令

从列表中读取值

for var in list
do
commands
done

从变量中读取列表

读取命令中的值

内部字段分隔符IFS(默认 空格、制表符、换行符)
限制bash shell看作是字段分隔符的字符IFS=$’\n’

使用通配符读取目录*

for file in /home/rich/test/*

C式for循环
for((variable assignment;condition;iteration process))
do
commands
done

while test command (或者while [ command ] )
do
other command
done

while command1
test command2 (由于是两条语句因此需要换行 或使用;隔开)
do
other command
done

until test command (由于是两条语句因此需要换行 或使用;隔开)
do
other command
done
until command1
test command2
do
other command
done
处理循环的输出
在done后使用管道或重定向循环输出结果。
例如done > output.txt

第十一章 处理用户输入

命令行参数

0 1第一个参数$2第二个参数,以此类推。
basename只返回程序名称,不带路径

特殊的参数变量

$#执行脚本时包含的命令行参数个数。(大括号中将$替换为!)
$*将命令行提供的所有参数作为一个单词处理;
$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理,允许对其中的值进行迭代;

移位

Shift命令默认将每个参数变量左移一个位置,变量$1的值被丢弃。
Shift n n为偏移量

处理选项

简单选项(当做参数进行处理)
从参数中分离选项

Shell使用双破折号(——)指示选项列表的结束。

处理带值的选项

这里写图片描述

使用getopt命令

格式:getopt options optstring parameters
选项字符串optstring,定义了命令行中的有效选项字母,在每个需要参数值的选项字母后放置一个冒号
如果希望忽略错误消息,命令中使用-q选项
脚本中使用getopt命令:
Set命令的一个选项是双破折号,表示将命令行参数变量替换为set命令的命令行的值。
Set – getopt –q ab:c “$@”(注意:是反引号)

更高级的getopts命令

命令格式getopts optstring variable
如果要禁止输出错误消息,使选项字符串以冒号开头。
参数被放入variable中。
环境变量OPTARG中包含需要选项的参数值;OPTIND的值表示getopts停止处理时在参数列表中的位置。
当getopts命令解析命令行选项时,会将打头的破折号去掉。
Getopts特性:①可以在参数之中包含空格,②选项字母和参数值中间可以没有空格;
这里写图片描述
getopt会将选项值和参数当做字符串处理,在使用数字作为选项值或参数时使用getopts更好一些。
这里写图片描述

获取用户输入:

基本读取read –p 指定提示
在read命令行中不指定变量时,将接收到的数据放置在环境变量REPLY中;
-t选项指定计数器,计数器满时,read命令返回非零退出状态。(if read –t 5 then/else fi)
默读(不希望输出显示)-s(数据显示,只是文本颜色与背景色相同)
读取文件
这里写图片描述

第十二章 显示数据

文件描述符(每个进程最多打开9个文件描述符,shell保留前三个)

这里写图片描述

重定向错误

2>

重定向错误和数据

2> file2 1> file1

错误和数据重定向到同一文件

&> file

脚本中重定向输出

临时重定向 重定向到某个文件描述符时,需在文件描述符编号钱添加&
永久重定向 exec通知shell在脚本执行起见重定向特定的文件描述符

脚本中重定向输入

exec 0< file

创建自己的重定向

使用exec命令为输出分配文件描exec 3>test3out echo “XXX” >&3
定向文件描exec 3>&1;exec 1>testout;exec 1>&3
入文件描exec 3<&0;exec 0<inputfile;exec 0<&3
取/写入文件描述符 exec 3<> inputoutputfile
关闭文件描述符 exec 3>&- (输入输出同时关闭)

列出开放文件描述符

lsof –p 制定进程(PID) $$为当前的PID
lsof –d 指定要显示的文件描述符编号 r读取w写入u读写
lsof –a 用来连接其他两个选项的结果

禁止命令输出

将STDERR重定向到空文件/dev/null

使用临时文件(只有所有者有读写权限)

当前文件夹创建临时文件mktemp +文件名模板(例如mktemp testing.XXXXXX)
在/tmp下创建临时文件 mktemp –t 文件名模板
创建临时目录 mktemp –d 文件夹模板

记录消息

输出同时发送到监视器和日志文件。 command | tree filename
如希望向文件添加数据 -a选项

第十三章 脚本控制

这里写图片描述

处理信号

捕捉信号 保护该信号不被shell处理,并在本地处理它
trap commands signals
捕获脚本退出
trap commands EXIT
移除捕获
trap – EXIT

以后台模式运行脚本

1、以命令行界面以后台模式运行shell脚本,在命令后加上一个&符号
如果终端退出,后台进程也会退出。

在不使用控制台的情况下运行脚本

nohup命令运行另一个命令阻塞发送到进程的任何SIGHUP信号。防止在退出终端会话时退出进程。
nohup命令格式:nohup command &
因为nohup命令将进程和终端断开,所以进程没有STDOUT和STDERR输出链接。为接收命令生成的任何输出,nohup将STDOUT和STDERR消息重定向到nohup.out文件。

作业控制

查看作业 jobs

这里写图片描述

重新启动停止的作业
以后台模式重新启动作业bg 作业号
以前台模式重新启动作业fg 作业号

调整调度优先级

nice命令 启动命令时设置他的调度优先级

格式:nice –n 正整数 (不许普通用户增加优先级)

renice命令 修改已运行的命令优先级

给定时间运行脚本

at 指定Linux系统运行脚本的时间

命令格式 at [-f filename] time
有26种不同的作业队列可用于不同的优先级水平,默认所有at作业都提交到作业队列a,即最高优先级队列,如希望以较低的优先级运行作业,可以使用-q参数指定字母。
输出STDOUT和STDERR通过邮件发送给用户。
列出排队的作业 atq
移除作业 atrm 作业号

batch命令 安排脚本在系统使用率低时运行

检查Linux系统当前的平均负载水平,如果低于0.8,将运行任何在作业队列中等待的作业。
命令格式: batch –f filename time

cron调度定期脚本

从头开始

让脚本在Linux一启动或用户启动新的bash shell会话时便自动运行。

系统启动时启动
随新shell一起启动。

shell在由于新用户登录而运行新的shell时运行.bash_profile
shell在每次启动新shell时运行.bashrc文件

高级shell脚本编程

第十四章 创建函数

函数是被赋予名称的脚本代码块。

创建函数(大括号“{”不能与函数名连在一起)

① function name {
commands
}
② name() {
commands
}

使用函数

在脚本中指定函数名即可。函数定义必须在使用之前。

返回值

以退出状态作为返回值。退出状态有三种生成方式。

默认退出状态 最后一条命令返回的退出状态。
使用return命令 以特定退出状态退出函数。0-255
使用函数输出 捕获函数输出(echo输出)存放到shell变量中。例如result=funcname

在函数中使用变量

向函数中传递参数(使用标准参数环境变量来表示命令行传递给函数的参数)
在函数中处理变量 脚本中定义的变量可以在函数中使用并修改。(危险)
            在函数中使用local声明变量,外部变量不受影响。

函数中使用数组

向函数传递数组 不能将数组变量作为单个参数传递。如func $arrname
(解决方案:将数组变量拆分为单个元素,函数内部重组为数组变量)例如:
function testit {
local newarray
newarray=(echo “$@”)
}
myarray=(1 2 3 4 5)
testit ${myarray[*]}
从函数返回数组(类似于向函数传递数组)

函数递归

库文件(将函数独立出来,供多个脚本使用) 关键是source命令(别名 点操作符“.”)例如: . ./myfuncs (注意 . 与后面文件的空格)

在命令行中使用函数

在命令行中创建函数
(存入环境变量中)使用unset删除 –f仅删除函数-v仅删除变量
将函数定义在一行命令中
使用多行命令定义函数
在.bashrc文件中定义函数

第十五章 与脚本用户的更多交互

创建文本菜单

创建菜单布局
clear清除文本;
echo –e输出特殊字符;
创建菜单函数

这里写图片描述

添加菜单逻辑

这里写图片描述

将其全部组合在一起
使用select命令

这里写图片描述

添加颜色

ANSI转义码(以控制序列指示器CSI)开头,后跟表示要在显示器上执行的操作的数据。

要控制显示格式,必须使用选择图形再现(SGR)转义码,格式SCIn[;k]m
这里写图片描述
这里写图片描述

显示ANSI转义码

使用echo将ANSI转义码发送到终端会话。CSI是一个两字符序列(ESC的ASCII值+左方括号字符)ESC的ASCII值通过Ctrl-V跟Esc键输入
这里写图片描述

制作窗口

dialog软件包
这里写图片描述
命令格式dialog –widget parameters(widget小部件名称,parameters窗口大小及文本)
选择OK或yes按钮,dialog返回0退出状态;选择Cancel或No按钮,dialog返回1退出状态;ESC退出,dialog返回255退出状态。
输出形式①使用STDERR(接收输入值);②使用退出代码状态(接收选项);
使用—title指定小部件的标题
dialog –msgbox text height width
dialog –yesno text height width
dialog –inputbox text height width
dialog –textbox filename height width
dialog –menu title height width itemcount(菜单项数) items(菜单项)
这里写图片描述
dialog –fselect dir(窗口使用的起始位置) height width
这里写图片描述
这里写图片描述

X Windows图形小部件(只能在图形界面运行)

KDE环境
kdialog软件包(不是包含在终端模拟器对话中)结果发送到STDOUT
命令格式:kdialog display-options window-options(部件类型) arguments
这里写图片描述
GNOME环境
gdialog包和zenity包
这里写图片描述
这里写图片描述
参数在命令行上另起一行输入,而不作为选项参数。

第十六章 sed和gawk

sed编辑器,称为流编辑器。
命令格式:sed options script file
这里写图片描述

1、 在命令行中定义编辑器命令

通过管道将数据传送给sed 例:echo “This is a test” | sed ‘s/test/big test/’

2、 在命令行中使用多个编辑器命令 使用-e选项,多个命令用分号分隔,命令结尾与分号间不能有空格

sed –e ‘s/brown/green/; s/dog/cat/’ data1

3、 从文件读取编辑器命令

gawk程序
提供了一种编程语言而不仅仅是编辑器命令行。

1、命令格式: gawk options program file

这里写图片描述

2、自命令行读取程序脚本

gawk程序脚本由左大括号和右大括号定义
使用Ctrl-D结束gawk程序

3、 数据字段变量

0 1 表示文本行中第一个数据字段
$n 表示文本行中第n个数据字段
gawk默认字段分隔符是任意空白字符(如制表符和空格) -F指定字段分隔符,如-F:

4、 使用多个命令

多个命令之间用分号“;”分隔

5、 从文件读取程序

-f script

6、 在处理数据之前运行gawk脚本

gawk ‘BEGIN {commands}’
如果有正常处理脚本程序,使用另一脚本片段定义。例如gawk ‘BEGIN {command1} {commands}’

7、 在处理数据之后运行gawk脚本

gawk ‘END {commands}’

sed编辑器扩展

1、 更多替换选项

s/pattern/replacement/flags
flags:
数字(新文本替换的模式)替换第几次出现的内容
g(一行全部替换)
p(打印原始行的内容) -n禁止sed编辑器的输出
w file(将输出保存到指定的文件中)
由于正斜杠/用作定界符,如果正斜杠出现在模式文本中必须使用反斜杠转义。
sed允许为替换命令中定界符选择一个不同的字符。如sed ‘s!/bin/bash!/bin/csh!’

2、 sed使用范围

如仅想将命令应用于某特定行,必须使用行寻址。
格式:[address]command 或
address{
command1
command2
}
数字式行寻址:①单行行号;(尾行$)②起始行号、逗号+结束行号
文本模式筛选器
格式:/pattern/command

3、 删除行

sed ‘d

4、 插入和附加文本

插入命令(i)在指定行之前添加新的一行
附加命令(a)在指定行之后添加新的一行
格式:sed ‘[address]command\ 如:
这里写图片描述

5、 更改行

c命令

6、 变换命令

y命令 对单个字符进行操作。inchars和outchars一对一映射,如果inchars和outchars长度不同,sed生成错误消息。

7、 打印命令

① 打印行p,与-n搭配使用 sed –n ‘2,$p’
② 打印行号=命令 sed ‘=’
③ 列出行l(小写的L) 允许打印数据流中的文本和不可打印的ASCII字符

8、 文件与sed

写文件w用于将文本行写入文件 格式:[address]w filename
例:sed –n ‘/IN/w INcustomers’ data10
从文件读取数据r (插入独立文件中的数据)不能使用地址范围

第十七章 正则表达式

正则表达式引擎
POSIX基本正则表达式(BRE)引擎;
POSIX扩展正则表达式(ERE)引擎;
一、 特殊字符类
这里写图片描述
这里写图片描述
扩展正则表达式(ERE)
gawk能识别ERE,sed不能。
使用大括号——指定对可重复的正则表达式的限制。(必须指定—re-interval命令行选项)
管道符号(检查两个或多个模式)(将两边的内容各自作为整体,而非单字符)

第十八章 高级sed编程

多行命令

①N在数据流中添加下一行以创建用于处理的多行组。

这里写图片描述
(如果待搜索内容在末尾则存在问题,解决方案:将单行命令移到N命令前)
这里写图片描述

②D删除多行组中的单个行

在使用N找到两行后只想删除第一行而非两行都删除

③P打印多行组中的单个行

只打印模式空间的第一行

保留空间(启动sed时保留空间包含一个空行)

模式空间是一个活动的缓冲区。
这里写图片描述

否定命令

!用于否定命令。在通常命令被激活的地方不激活命令
这里写图片描述

更改命令流

1、 分支

格式:[address]b [label]
标签在后面
这里写图片描述
这里写图片描述
这里写图片描述
标签在前面

2、 测试

不是基于地址跳转到标签,而是基于替换命令的结果跳转到标签。
格式:[address]t [label]
匹配替换成功后,测试命令跳过后续的替换命令。
这里写图片描述

模式替换

与号

用于表示替换命令中的匹配模式。无论什么文本匹配上定义的模式,都可以使用与号在替换模式中调用它。(批注:相当于正则中调用分组1、2)

替换个别单词

圆括号定义替换模式中的子字符串元素,替换字符由反斜杠和数字组成。(圆括号必须转义)
这里写图片描述

脚本中使用sed

sed包装器

这里写图片描述

重定向sed输出:使用反引号(`)

创建sed工具

  1. 对可能有空行的文件使用双倍行距
    使用sed ‘G’ filename时有空行的位置出现3个空行,解决办法是从数据流中删除空行。sed ‘/^ /d; !G’ filename
  2. 显示行号
    sed ‘=’ filename | sed ‘N; s/\n/ /’ 通过‘=‘显示行号后将其放在同一行
    打印最后几行
sed ‘{
:start
$q
N
12,$D
b start
}’ filename
  1. 删除行
    删除连续空行 /./,/^ /!d/./, !d (注释:第一个非空行到最后不删,其他都是开头空行)
    删除结尾空行
sed ‘{
:start
/^\n*$/{$d; N; b start }
}’

第十九章 高级gawk编程

使用变量

内置变量

这里写图片描述
这里写图片描述
这里写图片描述

用户定义变量

使用“=”赋值,输出时不带“$”符号。赋值可以在脚本中赋值,也可以在命令行中赋值。例:
这里写图片描述
这里写图片描述
(数学运算符^等同于**,求幂运算)

使用数组(关联数组)

递归时使用for(key in array)
删除数组元素delete array[“index”]

使用模式

1、正则表达式 在使用正则表达式时,正则表达式必须出现在程序脚本的左括号之前。
例如:`gawk ‘BEGIN{FS=”,”} /11/{print $1}’ data1`
2、匹配操作符 允许限制正则表达式匹配记录中的特定数据字段。(波浪线~)需要指定匹配操作符,数据字段变量,匹配的正则表达式。
例如:`gawk ‘BEGIN{FS=”,”} $2 ~ /^data/{print $0}’ data1`   匹配出第二个字段以data开头字符串
3、数学表达式 ==,<=,<,>=,>
例如 `gawk –F: ‘$4 == 0{print $1}’ /etc/passwd`

四、 格式化命令

1、 if语句
2、 while语句
3、 do-while语句
4、 for语句

五、 格式化打印

printf命令 printf “format string”,var1,var2……
这里写图片描述
这里写图片描述

六、 内置函数

1、 数学函数

这里写图片描述
这里写图片描述

2、 字符串函数

这里写图片描述
这里写图片描述

3、 时间函数

这里写图片描述

七、 用户自定义函数

1、 关键字function
2、 使用自己的函数 单独出现在定义的任何代码部分之前(包括BEGIN部分)
3、 创建函数库 函数合并到单独的库文件中 使用-f命令将函数库与gawk组合使用。

可选的Linux shell

第二十章 ashshell

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

第二十一章 tcsh

tcsh shell使用命令行参数、默认文件、环境变量和内置命令来定义shell操作环境。
这里写图片描述
tcsh文件: 登录文件、shell启动文件、退出文件

登录文件    /etc/csh.login  /etc/csh/login
启动文件    /etc/csh.cshrc  $HOME/.cshrc	$HOME/.tcshrc
退出文件    /etc/csh.logout $HOME/.logout

tcsh shell包含两种环境变量 shell变量、系统环境变量

第二十二章 Kornshell

ksh88和ksh93
ksh93包括 命令行参数、默认文件、环境变量、内置命令

默认文件    /etc/profile    $HOME/.profile

ksh93环境变量特性:

随机数 $RANDOM
定义变量类型

这里写图片描述

复合变量

这里写图片描述

特殊变量下标

在ksh93中编写脚本

  1. 执行数学运算 let命令、双圆括号、
  2. 结构化命令
  3. 命令重定向 variable = $( commond )
  4. 规程函数 get获取函数变量的值,set设置函数变量的值,unset重置函数变量的值。使用.sh.value变量

第二十三章 zsh shell

一、zsh shell的组成部分

1、 shell选项

这里写图片描述
选项类型:
这里写图片描述

2、 zsh shell文件

shell启动文件 /etc/zshenv $HOME/.zshenv

登录文件        /etc/zlogin /etc/zprofile   $HOME/.zlogin	$HOME/.zprofile
交互式文件       /etc/zshrc  $HOME/.zshrc
退出文件        /etc/zlogout    $HOME/.zlogout
3、 环境变量

支持typeset命令,在变量使用前声明变量的属性
这里写图片描述
这里写图片描述
数值数组起始索引值为1。
声明关联数组 variable=( key1 value1 key2 value2 )

4、 内置命令

核心内置命令
添加模块
这里写图片描述
这里写图片描述
查看模块 zmodload不加任何命令行参数
载入模块 zmodload 模块名
删除模块 zmodload –u 模块名

二、使用zsh编写脚本

1、数学运算

执行计算 let命令; 双圆括号参数
数学函数

2、结构化命令
3、函数 使用function关键字; 定义带圆括号的函数名

可以将函数放在单独文件中,zsh shell通过fpath环境变量查找函数,可将函数文件放在该路径下任意目录中。
zsh shell解析函数前,必须使用autoload命令,将函数载入内存 格式:autoload filename

高级主题

第二十四章 使用数据库

这里写图片描述
发送命令:单条命令
这里写图片描述
多条命令
这里写图片描述
将输出赋值给变量
这里写图片描述
使用格式化标签
mysql dbname –u username –X –e ‘commond’

第二十五章 使用web

1、 Lynx程序

2、 cURL程序

3、 zsh的TCP模块

这里写图片描述
这里写图片描述

第二十六章 使用电子邮件

第二十七章 管理员使用的shell脚本

1、 监控系统统计信息

监控磁盘空闲空间

这里写图片描述

谁在霸占磁盘资源

这里写图片描述

监视CPU和内存使用情况

使用uptime和vmstat命令

2、 执行备份

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值