新手学习shell

什么是shell

shell是一个用c语言编写的程序,他是用户使用linux的桥梁。shell 既是一种命令语言,又是一种程序设计语言

Shell编程只需要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就行了

#!告诉系统其后路径所指定的程序即是此脚本文件的Shell程序

让我们开始第一个shell脚本

我们可以使用vim命令来创建文件,比如:test.sh 扩展名为sh(sh代表shell)

#!/bin/bash
echo "Hello World"!

#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

运行Shell脚本有两种方法

  1. 作为可执行程序(常用)

    1. 将上面的代码保存为test.sh,并cd到相应目录

      chmod +x ./test.sh  #使脚本具有执行权限
      ./test.sh  #执行脚本
      
    2. 注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

  2. 作为解释器参数

    1. 这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:

      /bin/sh test.sh
      /bin/php test.php
      

      这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

Shell变量

定义变量

# 变量名不需要加美元符号($)
my_name="蛙蚊丶丶"

注意:

  1. 变量名与等号之间不能有空格
  2. 变量名规则
    1. 命名只能使用英文,数字和下划线,首字符不能为数字
    2. 中间不能有空格,可以用下划线(__)代替
    3. 不能使用标点符号
    4. 不能使用bash里面的关键字(可通过help命令查看保留关键字)

使用变量

# 使用一个定义过的变量,只需要在变量名前面加一个美元符号($)
my_name="wawen"
echo $my_name

# 花括号可以帮助脚本解释器识别变量的边界 (推荐)
echo ${my_name}

# 如下 如果不给变量加花括号那么脚本解释器会把$my_namespring当作一个变量且值为空
echo "My name is ${my_name}spring"

# 已定义的变量可被重复定义(赋值)
my_game="yuanshen"
echo ${my_game}
# 注意 后面的多次赋值不能写${my_game},只有在使用变量的时候才美元符号($)
my_game="LOL"
echo ${my_game}

# 打印结果
yuanshen
LOL

只读变量

只读变量的值不能被改变

使用readonly命令可以将变量定义为只读变量

#!/bin/bash
my_game="yuanshen"
readonly my_game
my_game="LOL"

# 以下是执行脚本的结果
test.sh:行22: my_game: 只读变量

删除变量

# 使用unset命令可以删除变量
unset str_name

# 变量被删除后不能再次使用
my_game="yuanshen"
unset my_game
echo ${my_game} # 打印结果为空

# unset 命令不能删除只读变量
my_game="yuanshen"
readonly my_game
unset my_game
# 以下是执行脚本的结果
test.sh:unset: my_game: 无法反设定: 只读 variable

变量类型

运行shell时,会同时存在三种变量:

  1. 局部变量
    1. 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量
    1. 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量
    1. shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

Shell字符串

字符串时shell编程中最常用最有用的数据类型,字符串可以单引号、双引号,也可以不用引号

# 单引号
str='this is a string'

单引号字符串的限制

  1. 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  2. 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
# 双引号
goods='book'
str="this is a ${goods}"
echo ${str}

# 以下是执行脚本的结果
this is a book

双引号的优点

  1. 双引号里可以有变量
  2. 双引号里可以出现转义字符

拼接字符串

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !' # 单引号字符串内变量无效,原样打印
echo $greeting_2  $greeting_3

# 以下是执行脚本的结果
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

获取字符串长度

string="abcd"
echo ${#string} #输出 4

提取字符串

# 第一个字符索引为0
str="hello_world"

# 代表第二个字符开始截取后三个字符
echo ${str:1:3} 
# 输出 ell

查找子字符串

string="runoob is a great site"

# 以下脚本代表从string变量中 查找字符i的位置
# 此时是计算数字,第一个字符为1,以此类推
echo ${string}  `expr index "${string}" i` 
# 注意 此时语句外部使用的是反引号" ` ",而非单引号" ' "

# 以下为输出结果
runoob is a great site 8

Shell数组

  1. bash支持一维数组,不支持多维
  2. 无限定数组大小且下标从0开始
  3. 可以不使用连续的下标,且下标的范围没有限制

定义数组

在Shell中,用小括号表示数组,数组元素用“空格”符号分割,以下为数组的一般定义形式:

# 数组元素可以为数字、字符串,不做限制

array_name=(v0 "v1" v2 ... vn)

# 或者
array_name=(
v0
"v1"
v2
...
vn
)

# 也可单独定义数组的各个分量:
array_name[0]="v0"
array_name[3]="v3"
array_name[6]=6
echo ${array_name[@]} # 使用@符号可以获取数组中的所有元素

# 以下是执行脚本的结果
v0 v3 6

读取数组

# 读取目标数组下标的值
${数组名[下标]}

# 使用@或者*符号可以获取数组中的所有元素
echo ${array_name[@]} ${array_name[*]}

# 取得数组单个元素的长度
${#array_name[n]}

Shell注释

  1. 单行注释

    #开头的行就是单行注释,会被解释器忽略

    # 注释内容(#后面加空格为了注释规范)
    
  2. 多行注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

Shell传递参数

可以在执行Shell脚本之前,向脚本传递参数,脚本内获取参数的格式为:$n。其中n代表一个数字,1为执行脚本的第一个参数,2为第二个参数,以此类推

./test.sh 1 2

# Shell传递参数
echo "执行的文件名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"

# 以下是执行脚本的结果
执行的文件名./test.sh
第一个参数1
第二个参数2
第三个参数

以下是几个特殊字符处理参数:

$#	传递到脚本的参数个数

$*	以一个单字符串显示所有向脚本传递的参数。
	如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。
	
$$	脚本运行的当前进程ID号

$!	后台运行的最后一个进程的ID号

$@$*相同,但是使用时加引号,并在引号中返回每个参数。
	如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。
	
$-	显示Shell使用的当前选项,与set命令功能相同。

$?	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

Shell基本运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

算术运算符

原生bash不支持简单的数学运算,通过其他命令进行实现,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

val=`expr 4 + 5` 
# 注意此时使用的是反引号而不是单引号 
# 且运算符两边要有空格,否则输出结果为 val结果为:4+5
# 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号
echo "val结果为:${val}" # val结果为:9

# 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符	说明	举例
+	  加法									 `expr $a + $b` 结果为 30。
-	  减法									 `expr $a - $b` 结果为 -10。
*	  乘法									 `expr $a \* $b` 结果为  200。
/	  除法									 `expr $b / $a` 结果为 2。
%	  取余									 `expr $b % $a` 结果为 0=	  赋值									 a=$b 将把变量 b 的值赋给 a。
==	  相等。用于比较两个数字,相同则返回 true。	    [ $a == $b ] 返回 false。
!=	  不相等。用于比较两个数字,不相同则返回 true。	   [ $a != $b ] 返回 true。

注意
1.条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]2.乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

关系运算符

# 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
# 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符	说明	举例
-eq	检测两个数是否相等,相等返回 true。	[ $a -eq $b ] 返回 false。
-ne	检测两个数是否不相等,不相等返回 true。	[ $a -ne $b ] 返回 true。
-gt	检测左边的数是否大于右边的,如果是,则返回 true。	[ $a -gt $b ] 返回 false。
-lt	检测左边的数是否小于右边的,如果是,则返回 true。	[ $a -lt $b ] 返回 true。
-ge	检测左边的数是否大于等于右边的,如果是,则返回 true。	[ $a -ge $b ] 返回 false。
-le	检测左边的数是否小于等于右边的,如果是,则返回 true。	[ $a -le $b ] 返回 true。

布尔运算符

运算符	说明	举例
!	非运算,表达式为 true 则返回 false,否则返回 true。	[ ! false ] 返回 true。
-o	或运算,有一个表达式为 true 则返回 true。	[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a	与运算,两个表达式都为 true 才返回 true。	[ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算符

运算符	说明	举例
&&	逻辑的 AND	[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||	逻辑的 OR	[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

运算符			说明								举例
=	检测两个字符串是否相等,相等返回 true。			[ $a = $b ] 返回 false。
!=	检测两个字符串是否不相等,不相等返回 true。	   [ $a != $b ] 返回 true。
-z	检测字符串长度是否为0,为0返回 true。			 [ -z $a ] 返回 false。
-n	检测字符串长度是否不为 0,不为 0 返回 true。		[ -n "$a" ] 返回 true。
$	检测字符串是否为空,不为空返回 true。			 [ $a ] 返回 true。

文件测试运算符

操作符	说明	举例
-b file	检测文件是否是块设备文件,如果是,则返回 true。	
[ -b $file ] 返回 false。

-c file	检测文件是否是字符设备文件,如果是,则返回 true。	
[ -c $file ] 返回 false。

-d file	检测文件是否是目录,如果是,则返回 true。	
[ -d $file ] 返回 false。

-f file	检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。	
[ -f $file ] 返回 true。

-g file	检测文件是否设置了 SGID 位,如果是,则返回 true。	
[ -g $file ] 返回 false。

-k file	检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。	
[ -k $file ] 返回 false。

-p file	检测文件是否是有名管道,如果是,则返回 true。	
[ -p $file ] 返回 false。

-u file	检测文件是否设置了 SUID 位,如果是,则返回 true。	
[ -u $file ] 返回 false。

-r file	检测文件是否可读,如果是,则返回 true。	
[ -r $file ] 返回 true。

-w file	检测文件是否可写,如果是,则返回 true。	
[ -w $file ] 返回 true。

-x file	检测文件是否可执行,如果是,则返回 true。	
[ -x $file ] 返回 true。

-s file	检测文件是否为空(文件大小是否大于0),不为空返回 true。	
[ -s $file ] 返回 true。

-e file	检测文件(包括目录)是否存在,如果是,则返回 true。	
[ -e $file ] 返回 true。

Shell echo命令

# 以下结果一致
echo "It is a string"
echo It is a string
-------------------------------------
# 显示转义字符
echo "\"It is a string"\" # 结果为 "It is a test"
--------------------------------------
# 显示变量 read命令从标准输入中读取一行,并把值输入给shell变量(类似java的scanner机制)
read name
echo "${name} is a test" 
# 以下为脚本输出结果
OK                     #标准输入
OK It is a test        #输出
--------------------------------------
# 显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
# 以下为脚本输出结果
OK!

It is a test
--------------------------------------
# 显示不换行
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
# 以下为脚本输出结果
OK! It is a test
--------------------------------------
# 显示日期
echo `date` # 此为反引号
# 以下为脚本输出结果
2021年 07月 11日 星期日 15:15:59 CST

Shell printf命令

# 命令语法
printf  format-string  [arguments...]
:<<!
参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。
!

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

printf的转义序列

序列	说明
\a	警告字符,通常为ASCII的BEL字符

\b	后退

\c	抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略

\f	换页(formfeed)

\n	换行

\r	回车(Carriage return)

\t	水平制表符

\v	垂直制表符

\\	一个字面上的反斜杠字符

\ddd	表示1到3位数八进制值的字符。仅在格式字符串中有效

\0ddd	表示1到3位的八进制值字符

Shell test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

# 数值测试
参数	说明
-eq	等于则为真
-ne	不等于则为真
-gt	大于则为真
-ge	大于等于则为真
-lt	小于则为真
-le	小于等于则为真
--------------------------------
# 字符串测试
参数	说明
=	等于则为真
!=	不相等则为真
-z 字符串	字符串的长度为零则为真
-n 字符串	
--------------------------------
# 文件测试
参数	说明
-e 文件名	如果文件存在则为真
-r 文件名	如果文件存在且可读则为真
-w 文件名	如果文件存在且可写则为真
-x 文件名	如果文件存在且可执行则为真
-s 文件名	如果文件存在且至少有一个字符则为真
-d 文件名	如果文件存在且为目录则为真
-f 文件名	如果文件存在且为普通文件则为真
-c 文件名	如果文件存在且为字符型特殊文件则为真
-b 文件名	如果文件存在且为块特殊文件则为真
--------------------------------
# 此外还有三个逻辑运算符操作(a)(o)(!)

Shell流程控制

if 条件
# 如果 else 分支没有语句执行,就不要写这个 else。
--------------------------------
# if语句语法格式

if condition
then
    command1 
    command2
    ...
    commandN 
fi #以fi结束if

# 可写成一行以分号(;)分隔
if[2 -gt 1];then echo "true";fi
--------------------------------
# if else

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
--------------------------------
# if else-if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
--------------------------------
for 循环
# for循环一般格式
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

# 一行形式
for var in item1 item2 ... itemN; do command1; command2… done;

# 示例
for str in This is a string
do
    echo $str
donee

# 结果
This
is
a
string
while 语句
# 一般形式
while condition
do
    command
done
until 循环
# 与while语句相反 直到条件为true停止
until condition
do
    command
done
case … esac
:<<!
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
!
casein
v1)
    command1
    command2
    ...
    commandN
    ;;
v2)
    command1
    command2
    ...
    commandN
    ;;
esac
跳出循环
break # 跳出整个循环
continue # 跳出当前循环

Shell函数

所有函数在使用前必须定义

# 函数定义如下
# 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
[ function ] funname [()] # function可加可不加
{
    action;
    [return int;]
}
--------------------------------
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
--------------------------------
# 函数返回值在调用该函数后通过 $? 来获得。

函数参数

在函数体内部,通过 $n 的形式来获取参数的值,以1开始。

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

# 以下为脚本执行结果
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
--------------------------------
参数处理	说明
$#	传递到脚本或函数的参数个数
$*	以一个单字符串显示所有向脚本传递的参数
$$	脚本运行的当前进程ID号
$!	后台运行的最后一个进程的ID号
$@$*相同,但是使用时加引号,并在引号中返回每个参数。
$-	显示Shell使用的当前选项,与set命令功能相同。
$?	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

文件包含

Shell 也可以包含外部脚本,可以很方便的封装公用代码作为独立文件

. filename   # 注意点号(.)和文件名中间有一空格source filename
--------------------------------
# test1.sh文件
my_name="wawen"
--------------------------------
# test2.sh文件
. ./test1.sh # 或者使用 source ./test.sh
echo "my name is ${my_name}"

你们的支持就是我创作路上最大的动力,如果觉得有用的话,还请大大们留下你们的大拇指,谢谢

第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 1.3.1 进程查看 20 1.3.2 实时进程监控 22 1.3.3 停止进程 24 1.4 监控磁盘空间 25 1.4.1 挂载介质 25 1.4.2 使用df命令 26 1.4.3使用du命令 27 1.5 操作据文件 28 1.5.1 据排序(sort) 28 1.5.2 搜索据 (grep) 30 1.5.3 压缩据 30 1.5.4 归档据(tar) 33 1.6 使用Linux环境变量 34 1.6.1 设置环境变量 34 1.6.2 默认的shell环境变量与path变量的设置 37 1.7 Linux文件权限 40 1.7.1 Linux安全性 40 1.7.2 使用Linux用户组 46 1.7.3 解码文件权限 47 1.7.4 修改安全设置 49 1.8 vim编辑器 52 第2章 基本脚本编译 54 2.1 创建脚本与使用变量 54 2.1.1 创建脚本 54 2.1.2 使用变量 55 2.2 重定向输入输出与学计算 57 2.2.1 输出重定向 57 2.2.2 输入重定向 58 2.2.3 管道 58 2.2.4 学计算 58 2.3 退出脚本 60 第3章 结构化命令 61 3.1 if语句 61 3.1.1 if-then语句 61 3.1.2 if-then-else语句 61 3.1.3 嵌套if语句 62 3.2 if条件语句 63 3.2.1 值比较 63 3.2.2字符串比较 64 3.2.3 文件比较 65 3.2.4 复合条件检查 65 3.3 if-then的高级特征与case命令 66 3.3.1 使用双圆括号 66 3.3.2 使用双方括号 67 3.3.3 case命令 67 3.4 for命令 67 3.4.1 读取列表 68 3.4.2 读取变量与读取命令 69 3.4.3 改变字段分隔符与使用通配符读取目录 69 3.4.5 C式的for命令 70 3.5 while、until命令 71 3.5.1 使用多条测试命令 71 3.5.2 until命令与循环嵌套 72 3.6 文件据的循环与控制循环 73 3.6.1 文件据的循环 73 3.6.2 break命令 73 3.6.3 continue命令 75 第4章 处理用户输入与显示据 76 4.1 命令行参与特殊的参变量 76 4.1.1 读取参 76 4.1.2 读取程序名称 77 4.1.3 测试参 77 4.1.4 参 77 4.1.5 获取所有据 78 4.2 移位与选项 79 4.2.1 移位 79 4.2.2 找出选项 79 4.2.3 使用getopt命令 81 4.2.4 更高级的getopts命令 83 4.2.4 标准化选项 84 4.3 获取用户输入 84 4.3.1 基本读取 84 4.3.2 计时 85 4.3.3 默读与文件读取 85 4.4 显示据 86 4.4.1 标准文件描述符 86 4.4.2 重定向错误 87 4.4.3 临时重定向 88 4.4.4永久重定向 88 4.4.5 在脚本重定向输入 89 4.5 创建自己的重定向 90 4.5.1 创建输出文件描述符 90 4.5.2 重定向文件描述符 90 4.5.3 创建输入文件描述符 91 4.5.4 创建读取/写入文件描述符 91 4.5.5 关闭文件描述符 92 4.5.6列出开发文件描述符 92 4.5.7禁止命令输出 94 4.6 使用临时文件 94 4.6.1 创建本地临时文件 94 4.6.2 在/temp创建临时文件 95 4.6.3 创建临时目录 96 4.6.4 记录消息 96 第5章 脚本控制 97 5.1 处理信号 97 5.1.1 Linux信号回顾 97 5.1.2 生成信号 97 5.1.3捕获信号 99 5.1.4捕获脚本退出 99 5.1.4移除捕获 100 5.2 以后台模式运行脚本 100 5.3 作业控制 102 5.3.1查看作业 102 5.3.2重新启动停止的作业 103 5.4 nice与renice命令 104 5.4.1 nice命令 104 5.4.2 renice命令 104 5.5 定时运行脚本 105 5.5.1使用at命令调度作业 105 5.5.2使用batch命令调 107 5.5.3 调用定期脚本 107 5.6 从头开始 109 5.6.1在启动时启动脚本 109 5.6.2随新shell一起启动 109 第6章 创建函 110 6.1 基本脚本函 110 6.1.1 创建函 110 6.1.2 使用函 110 6.2 返回值 111 6.2.1 默认退出状态 111 6.2.2 使用return命令 111 6.2.3 使用函输出 112 6.3 在函使用变量 112 6.3.1 向函传递参 112 6.3.2 在函处理变量 113 6.4 组变量与函 114 6.4.1 向函传递组 114 6.4.2从函返回组 115 6.5 函递归与创建库 116 6.5.1函递归 116 6.5.2 创建库 116 6.6 在命令行使用函 117 6.6.1在命令行创建函 117 6.6.2在.bashrc文件定义函 117 6.7 select命令使用 119 第7章 sed、gawk介绍与正则表达式 120 7.1 sed编辑器 120 7.1.1 在命令行定义编辑器命令 120 7.1.2 在命令行使用多个编辑器命令 121 7.1.3 从文件读取编辑器命令 121 7.2 gawk程序 122 7.2.1 gawk命令格式 122 7.2.2 自命令行读取程序脚本 122 7.2.3 使用据字段变量 123 7.2.4 在程序脚本使用多个命令 124 7.2.5从文件读取程序 124 7.2.6 在处理据之前运行脚本 125 7.2.7 在处理据之后运行脚本 125 7.3 sed编辑器基础知识 126 7.3.1 更多替换选项 126 7.3.2 使用地址 127 7.3.3 删除行 128 7.3.4 插入和附加文本 129
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值