bash中文手册学习
2018-04-25 23:48:50 19 举报
AI智能生成
linux下bash中文手册
作者其他创作
大纲/内容
高级用法
eval 功能是生成代码<br>用途:把字符串直接解析成代码然后执行<br>
转化成命令举例:<br>mycmd1="find . -name *.sh"<br>mycmd2="grep -rnH "fp-rte""<br>eval ${mycmd1} | ${mycmd2}<br>最终的效果是执行命令
转化成代码举例:<br>FGUO_PATH1=/home/fengtian/self_develop<br>num=1<br>mypath=FGUO_PATH${num} #FGUO_PATH1<br>realpath=$(eval echo \$\{$mypath\}) <br>#转化成代码realpath=/home/fengtian/self_develop
newpath=/home/bangyun/test<br>eval ${mypath}=${newpath}<br>#FGUO_PATH1=/home/bangyun/test
语法规则:<br>1 先是bash解析${var}成真正的数据<br>2 然后eval把它转换成代码<br>eval ${mypath}=${newpath}
case测试结构
格式:<br>case "$value" in <br> "apple")<br> cmd1<br> cmd2<br>;; #表示结束相当与break<br> "banana")<br> cmd3<br> cmd4<br>;;<br>esas<br>
问题
bash里面正则表达式规则
bash总体介绍
行首指定解释器<br>#! /bin/bash (linux系统下默认的解释器)
bash的使用范围和特点
注意要使用 bash 来执行脚本, 不推荐sh执行<br>bash ./fguo_test.sh
特殊字符
管道符号 |
1 管道是将第一个命令的输出导出,做为第二个命令作为输入
2 管道是在同一个子进程中运行的, 因此不能修改父进程的变量
命令后台运行 &
当命令尾部跟随'&'表示命令进行后台运行
重定向输入输出(就是减号) -
1 利用管道将标准输出重定向到其他命令中
grep -rnH "ospfd" syslog | diff my_log.txt -
解释: 1 grep搜索结果输出到标准输出.
2 diff 比较my_log.txt 和前面的grep结果
% 操作符有2种用途:
1 数字计算时取模 z=5%3 (结果是2)
2 模式匹配操作符
命令分隔符(就是分号) ;
同一行中使用多条命令, 需要用';' 分隔
命令替换符(反引号): `command`
用途: 将命令的输出结果作为变量赋值给另一个变量
双圆括号结构: (())<br>表示进行数学运算
取值符号 (就是美元符号)$
用途: 用来取出变量的内容
4章 变量与参数
变量替换:
引用变量值的过程称为变量替换
变量名实际上是一个指针,它指向真正存储数据的内存地址
1 规则: 变量赋值时(=赋值符号的两边)决不能带空格
var1="tool"
var2=${var1}
var3=${var1/ool/ooth} 将"tool"替换成了"tooth"
2 字符串的强引用(''单引号包含)和弱引用(双引号包含)
echo "$var1" # 输出的是var1变量的值test
echo '$var1' #输出的是单纯字符串$var1
变量赋值: = (使用等号赋值,但是等号‘=’两端不能有空格)
1 直接赋值: var0='myfile'
2 反引号命令赋值: var1=`ls -l`
3 高级版命令赋值: var2=$(ls -l)
4 for循环中赋值: for var3 in 1 3 5
5 read赋值: read var4
结构中赋值:<br>{read var1<br> read var2<br>} < /var/tmp/log<br>功能解释:从文件/var/tmp/log中<br>读取第1行到var1变量,第2行到var2里<br>
4.3 Bash变量是弱类型的<br>规则: Bash是不区分变量类型的, 本质上都是字符串, 只要字符串中含有数字就进行数字运算<br>A=1234<br>let "A = A+ 2" #结果A=1236<br>
特殊类型的变量
环境变量: 用于不同脚本之间共享变量<br>1 export 命令把当前设置的环境变量更新出去<br>2 子进程会继承父进程的环境变量
位置变量表示传给脚本的参数: $0 $1 $2 .. ${10}
$0表示脚本的第一个参数,是脚本名
$# 表示所有参数的总个数, 不含第一个参数脚本名称
$@ 表示所有传递给该脚本的参数
shift命令将全部参数向左移动1个:<br>原始参数$1,$2,$3<br>移动之后原始$1被删除了,$1是原来的$2, $3是原来的$2
引用
字符串引用: 包含2种<br>1 (双引号)"“ 表示部分引用, 字符串中大部分特殊字符会被特殊解析处理<br>2 (单引号) ‘ 表示全引用, 字符串中即使有特殊字符,也不会做特殊解析处理
1 双引号举例:"This is ${var1}"<br>特殊符号${}会被特殊解释处理,替换为其指向的实际内容
转义字符:
解释: 当字符不是字面的含义时
1 echo -e '\rABC\nXXX' 使用-e参数后可以使用转义字符
测试结构
if 测试状态
#可以是命令返回值也可以是测试结构[]
then
command1
command2
else
cmd10
cmd11
if
1 测试结构命令[]举例:
if [ "abc" ]
then
ls -l
fi
2 测试命令返回值举例:
if grep "abc"
then
echo "grep test1"
fi
测试状态-> 使用测试结构: [] (就是方括号)表示测试命令,<br>相当于test命令
测试状态 -> 算数表达式的测试结果是双元括号: (())
((100||20)) #表示算数运算或
测试文件:<br>
-e 测试文件是否存在
-f 文件是普通文件,不是目录之类
其他比较
字符串比较:
[ ${str10} == ${str20} ] #表示相等
[ ${str10} != ${str20} ] #表示不相等
复合比较: && 表示与 || 表示或<br>if [ ${str30} != "apple" ] && [ ${str30} != "banana"]<br>then<br> command1<br> command2<br>fi
整数比较:
1 传统比较: -eq (相等), -gt (大于), -lt (小于), -ne (不相等)
[ ${var1} -gt ${var2} ] #表示var1大于var2
2 使用双圆括号表示数字比较
(( ${var10} >= ${var20}))
其他测试
-z 测试字符串长度为0
if [ -z ${str} ]
-n 测试字符串非空,<br>注意字符串变量需要在双引号之内
if [ -n "${str}"]
退出和退出状态:
1 退出的返回值: exit 2 <br>2 $? #表示最后一个命令的退出状态, 如果是函数的话,就是的返回值
循环结构
for var in [list]
do
cmd1
cmd2
done
举例:
for var in "abc" "x1" "y1"
[list] 中允许含有通配符
while [ condition ]<br>do<br>command(s)...<br>done
条件判断
字符串处理
字符串长度:<br>${#str1} 取得字符串的长度
字符串截取: <br>规则: ${string:start_position: length} 位置可以是负值,表示从最右边开始算<br>把字符串${string}的值进行截取, position是起始索引位置.<br>length是截取的长度,不指定的话就是剩余全部长度
举例:
string="abcdedf"
${string:1} -> ”bcdef“
${string:1:2} -> ”bc“
负值举例:<br>string="ABCDEF12345"<br>${string:(-2)} -> "45"
字符串删除子字符串:<br>规则:<br>1.1个'#'表示最短字符串匹配<br>${string#delete_short_str}<br>2. 2个'##' 表示最长字符串匹配<br>${string##del_long_str}<br>3. 1个'%'表示从尾部开始最短匹配<br>4. 2个’%%‘表示从尾部开始最长匹配
1 举例:<br>string="abcdef12345UVWYZabcd"<br>str2=${string#a*d} -> "ef12345UVWYZabcd"
2 举例:<br>string="abcdef12345UVWYZabcd987"<br>str2=${string##a*d} -> "987"<br>
3 举例从右开始匹配字符串:<br>str4="abcdef12345UVWYZabcd98239207"<br> str4_del=${str4%9*7} -> "abcdef12345UVWYZabcd9823"<br>
命令替换:
本质上是启动一个子进程执行该命令
2种格式
1 var1=$(ls -l)
2 var2=`ls -l`
I/O重定向
M > N
#表示把文件M的输出重定向到文件N里,
1 如果M指定, 表示标准输出stdout
2 该条命令结束后, 重定向也结束并恢复
M > &N<br>#表示把文件M输出重定向到文件N里,<br>从此以后所有输出都被重定向
1 关闭输入文件M: M<&- <br>2 关闭输出文件N: N>&-
cmd < file
把文件作为命令的输入
0表示stdin, 1 表示stdout, 2 表示stderr
0 条评论
下一页