手机网站注册页面淄博企业网站设计公司
函数
系统函数
常见内置命令
echo打印输出

#!/bin/bash
# 输出普通文本
echo "Hello, World!"# 输出变量值
name="Alice"
echo "Hello, $name"# 输出带有换行符的文本
echo -n "Hello, "  # -n 选项不输出换行
echo "World!"cd :改变当前工作目录 ; pwd:打印当前目录

#!/bin/bash
# 显示当前目录
echo "当前目录: $(pwd)"# 改变到 home 目录
cd ~
echo "已切换到 Home 目录: $(pwd)"# 返回上一级目录
cd ..
echo "返回上一级目录: $(pwd)"exit:退出脚本返回一个状态码

#!/bin/bash
echo "脚本即将退出"
exit 0  # 退出脚本并返回状态码 0(表示成功)read:读取用户输入

#!/bin/bash
echo "请输入你的名字:"
read name
echo "你好, $name"test - 条件测试

#!/bin/bash
# 文件存在性测试
if test -e "/etc/passwd"; thenecho "文件 /etc/passwd 存在"
elseecho "文件 /etc/passwd 不存在"
fi# 字符串测试
str="hello"
if test "$str" = "hello"; thenecho "字符串匹配"
elseecho "字符串不匹配"
fi# 数字比较
a=5
b=10
if test $a -lt $b; thenecho "$a 小于 $b"
fi常用外部命令
即常见的Linux服务器命令,下面对于常用的做出总结
ls :列出指定目录中的文件和子目录

cat : 查看文件内容

grep:搜索文本

也可以在脚本中写
#!/bin/bash
# 在文件中查找包含 "hello" 的行
grep "hello" file.txt
awk : 文本处理

sed :流编译器
#!/bin/bash
# 替换文件中的 "hello" 为 "hi"
sed 's/hello/hi/' file.txt# 删除文件中包含 "world" 的行
sed '/world/d' file.txtfind:查找文件

#!/bin/bash
# 在当前目录下查找所有以 ".txt" 结尾的文件
find . -name "*.txt"# 查找最近 5 天内修改过的文件
find . -mtime -5tar :压缩和解压

#!/bin/bash
# 创建一个 tar 包
tar -cvf archive.tar file1.txt file2.txt# 解压 tar 包
tar -xvf archive.tar自定义函数
基本语法
# 方法1:使用 `function` 关键字
function my_function() {echo "Hello, World!"
}# 方法2:省略 `function` 关键字
my_function() {echo "Hello, World!"
}
# 方法1:使用 `function` 关键字
function my_function1() {echo "Hello, World!"
}# 方法2:省略 `function` 关键字
my_function2() {echo "Hello, World!"
}my_function1my_function2函数参数
shell函数通过位置参数$1 $2等来使用参数

greet() {echo "Hello, $1! You are $2 years old."
}greet "Alice" 25  # 输出:Hello, Alice! You are 25 years old. 参数数量获取:通过 $#获取传递给函数的参数个数
count_args() {echo "Number of arguments: $#"
}count_args 1 2 3 返回值与错误处理
直接通过echo进行返回值

add() {result=$(( $1 + $2 ))echo $result
}sum=$(add 5 3)
echo "Sum is: $sum"  # 输出:Sum is: 8return返回状态码
-  $?存储的是上一个命令或函数的退出状态

check_positive() {if [ $1 -gt 0 ]; thenreturn 0  # 返回0表示成功elsereturn 1  # 返回1表示失败fi
}check_positive 10
if [ $? -eq 0 ]; thenecho "Positive number"
elseecho "Non-positive number"
fi错误处理

check_error() {if [ $1 -lt 0 ]; thenecho "Error: Negative number!" >&2exit 1fi
}check_error -1  
区部变量和全局变量
使用局部变量
-  local关键字限制变量在函数内部有效
- 如果没有使用local,变量将是全局的,函数外部也可以访问

example() {local var="I am local"echo $var
}example 
echo $var 
全局变量
- 函数内部不使用local,则变量会变成全局变量,函数外部也能访问

global_example() {global_var="I am global"
}global_example
echo $global_var  
递归函数

factorial() {if [ $1 -le 1 ]; thenecho 1elseprev=$(factorial $(( $1 - 1 )))echo $(( $1 * prev ))fi
}result=$(factorial 5)
echo "Factorial of 5 is: $result"  
函数调试
- set -x和- set +x允许你跟踪函数内部的执行过程

set -x  # 开启调试模式,显示每行命令及其执行结果example_debug() {echo "This is a debug example"echo "Another line"
}example_debugset +x  # 关闭调试模式
正则表达式
常规匹配
点号.:
a.b将匹配任意字符(除了换行符)位于a和b之间的字符串


方括号
[](匹配字符集中的任意一个字符):例如[aeiou]匹配任何一个元音字母(a、e、i、o、u)
apple
banana
grape
pear
orange
umbrella
插入符号
^(匹配行的开始):用来匹配以特定字符串开头的行
apple pie
banana split
apple tart
grape fruit
apple cider
$:匹配行结束,主要用来匹配特定字符串结尾的行
apple pie
banana tart
apple tart
grape tart
orange juice

|:示逻辑“或”操作符,匹配任意一个模式
apple
banana
carrot
grape
cucumber
orange
*:例如a*匹配零个或者多个a

+:匹配前一个字符或者多个

常用特殊字符
\:转移字符
- \.、- \*、- \+等
- 用于转义字符,使它们失去特殊意义,变为字面量字符。例如,.通常匹配任意字符,但如果你想匹配一个字面量的点,可以使用\.

():分组和捕获
- 语法:(abc|def)
- 说明:圆括号用于创建分组。它们可以帮助你将一部分模式组合在一起,从而作为一个整体来进行匹配

apple pie
banana split
grape fruit
apple tart
orange juice{}:量词
- 语法:a{n,m}、a{n}
- 说明:大括号用于指定前一个字符出现的次数。例如,a{2,4}匹配2到4个a,而a{3}只匹配正好3个a

aa
aaa
aaaa
aaaaa文本处理工具
cut
概述
用于从文本文件中提取字段、列或字符,可以通过指定分隔符、字段范围、字符位置等来灵活提取所需的数据
常用选项
- -f:选择字段。
- -d:指定分隔符。
- -c:选择字符位置。
- --complement:选择除了指定字段之外的所有字段。
- -s:只显示包含分隔符的行。
基本语法
cut OPTION... [FILE]...常用选项和用法
-f:选择字段
- 语法:cut -f FIELD
- -f用来指定要提取的字段。字段是通过分隔符(默认是制表符)来划分的
- -d ','用来指定字段的分隔符是逗号,而- -f 1,3表示提取第一列和第三列
- 注意文中如果有其他注释会失效


-d:指定分隔符
- 语法:cut -d DELIM
- 使用 -d选项来指定字段分隔符,默认为制表符。你可以将其设置为其他字符(如逗号、空格等)


-c:按字符位置选择
- 语法:cut -c N
- 使用 -c选项根据字符位置选择字段。你可以选择一个或多个字符位置进行提取
- 提取每一行的前三个字符


--complement:选择非指定字段
- 语法:cut --complement
 使用--complement选项选择除指定字段之外的所有字段
- 使用 cut提取除了第一列和第三列之外的所有列


-s:只显示有分隔符的行
-  语法:cut -s
- 使用 -s选项来排除没有分隔符的行

awk
概述
基本语法
awk 'pattern { action }' input_file- pattern:用于匹配的模式(正则表达式)。如果省略,则- awk会对每一行都执行动作
- action:在模式匹配后执行的操作。如果省略,则默认打印匹配的行
- input_file:要处理的输入文件。如果不指定,- awk会从标准输入读取数据
常用选项
打印整行内容
- awk会打印所有匹配行。只给出- awk '{ print }'就会打印每一行

打印指定字段
- awk将每一行默认按空格或制表符分割成字段,字段可以通过- $n访问,其中- n是字段的数字(从 1 开始)。- $1表示第一字段,- $2表示第二字段,依此类推

使用分隔符 -F
- 默认情况下,awk使用空格和制表符作为字段分隔符。你可以使用-F选项指定其他分隔符

条件判断

基础运算

BEGIN END
- BEGIN和- END是特殊的块,用来在处理文本前或后执行操作。- BEGIN用于在处理前执行,- END用于在处理后执行

结合正则表达式使用

内置变量的使用
- NR:表示当前记录(行)的编号
- NF:表示当前行的字段数
- FS:字段分隔符,默认为空格或制表符
- OFS:输出字段分隔符,默认为空

修改输出时的字段数值

