全国公路建设信用网站,人才招聘网站建设,潍坊网站建设wfxtseo,沈阳建设工程质量安全一、shell基本基础知识
1. shell命令中捕获上一个命令执行是否成功#xff0c;通过判断 $? 是否为0#xff0c;为0则表示成功#xff0c;其他错误码则表示执行失败。
2. sheel命令中#xff0c;变量赋值时默认都是字符串类型。赋值时须注意单引号与双引号的区别#xf… 一、shell基本基础知识
1. shell命令中捕获上一个命令执行是否成功通过判断 $? 是否为0为0则表示成功其他错误码则表示执行失败。
2. sheel命令中变量赋值时默认都是字符串类型。赋值时须注意单引号与双引号的区别 单引号不识别特殊语法。返回字符串内的原始内容。 双引号可以识别特殊符号。 无引号默认字符串但是中间有空格时容易出错建议双引号 反引号用于命令返回的结果等同于$()的用法。比如echo ls -l等价于echo $(ls -l),推荐后面的这种写法。
name奥利给
echo ${name}
奥利给 #输出奥利给
name1${name}
echo ${name1}
${name} #不识别name这个变量输出原始文字
name2${name}
echo ${name2}
奥利给 #识别了name变量并转成其值“奥利给”
3. bash和source及.的执行区别通过bash执行shell脚本相当于在当前窗口进行下启动一个子进程而通过source及.执行shell脚本是加载到当前的shell环境中。可通过pstree查看进程树。
4. 环境变量 用户环境配置文件在每个用户的目录下~/.bash_profile及~/.bashrc,这两个文件在用户登录时会自动加载运行。
系统配置文件对所有的用户生效(全局)在/etc/profile中会自动加载运行
查找环境变量
set/declare 显示所有的变量包括全局变量和局部变量
env 显示全局变量
export 显示和设置环境变量值临时的
5. 支持多条命令执行通过分号隔开 二、shell特殊变量
1. shell的特殊变量用于脚本、函数传递参数的时候有如下位置特殊变量
1$0 获取shell脚本文件名脚本路径
2$n 获取shell脚本的第n个位置参数n取值在1-9之间如果大于9则要写${10}参数空格隔开
3$# 获取shell脚本执行的参数总个数
4$* 获取shell脚本的所有参数不加引号等同于$。加上引号$*表示接收所有参数为单个字符串即所有的参数为一个整体。
5$ 获取shell脚本的所有参数不加引号等同于$*。加上引号$,每一个参数都是独立的。
2. shell脚本的特殊状态变量
1$? 上一次执行命令返回值返回为0表示成功其他则为失败
2$$ 当前shell脚本的进程ID可以用来停止当前脚本的进程
3$! 获取上一次后台执行的进程PID可以用来停止上一个后台执行脚本的进程。
4$_ 获取上次命令的最后一个参数 三、shell内置命令
echo 打印到终端相当于简化版的printf
eval 一次执行多个命令命令之间用分号隔开。eval ls;cd /tmd
exec 不创建子进程执行命令并且执行完后自动执行exit
四、shell变量子串的用法
${变量} 返回变量值
${#变量} 返回变量长度字符长度
${变量:start} 返回变量start数值之后的字符索引从0开始
${变量:start:length} 提取start之后的length限制的字符
${变量#word} 从变量开头删除最短匹配的word子串
${变量##word} 从变量开头删除最长匹配的word子串
${变量%word} 从变量结尾删除最短的word子串,这里的word可以用正则表达式来匹配。
${变量%%word} 从变量结尾删除最长的word子串
${变量/pattern/string} 用string替代第一个匹配的pattern.如果string为空则表示删除匹配到的字符串
${变量//pattern/string} 用string替代所有匹配的pattern。如果string为空则表示删除匹配到的字符串
nameJolin Su
name1abcABC123ABCabc
file/home/user/documents/report.txt
echo ${name} Jolin Su #返回变量的值
echo ${#name} 8 #返回变量的长度
echo ${name:3} in Su #从索引3开始输出
echo ${name:2:3} lin #从索引2开始输出3个字符
echo ${name#Jo} lin Su #从变量开头匹配上了Jo删掉
echo ${name#lin} Jolin Su #需要注意lin在中间不能匹配上开头所以返回原来的值
echo ${name1#a*c} ABC123ABCabc #从开始删除a*c匹配到的最短字符串
echo ${name1##a*c} #返回为空所有的字符都被删掉了a*c最长匹配到了最后一个
echo ${file#*/} home/user/documents/report.txt # #*/表示移除从开头开始的第一个斜杠及其之前的所有内容。
echo ${file##*/} report.txt # ##*/表示移除从开头开始的所有斜杠及其之前的所有内容直到最后一个斜杠为止。
echo ${file/o/xx} /hxxme/user/documents/report.txt
echo ${file//o/xx} /hxxme/user/dxxcuments/repxxrt.txt
echo ${name/o/} Jlin Su
五、shell变量扩展用法 主要用于变量值为空的判断及处理
result${parameter:-word} 如果${parameter}为空返回word字符串给result
result${parameter:word} ${parameter}为空返回word字符串给result并且赋值给parameter
result${parameter:?word} ${parameter}为空返回word字符串给result,相当于错误信息输出
result${parameter:word} ${parameter}为空则什么都不做如果非空则返回word给result
六、父子shell
shellsource script - command1 - command2 在同一个shell窗口执行命令 shell/bin/bash script -- -- 命令结束后返回父shell
subshell --comand1 --command2 -- 在子shell执行命令 shell./script -- --命令结束后返回父shell
subshell: --command1 --command2 -- 在子shell执行命令
#注意三种执行script的父子shell的不同在编写脚本时需要重点注意。
七、shell算数运算
7.1 shell中常见的算术运算符
运算符意义(*表示常用)、-加号(正号)、减号(负号)**、/、%乘号、除号、取余(取模)***幂运算 *、--增加及减少可前置也可放在变量结尾*!、、||逻辑非(取反)、逻辑与(and、逻辑或(or)*、、、比较符号小于小于等于大于大于等于、!、比较符号(相等不相等对于字符串也可以表示相等) *、向左移、或向右移~、|、、^按位取反按位异或按位与按位或、、-、*/、%赋值运算符例如a1相当于aa1
7.2 shell中常见的算术运算命令
运算操作符与运算命令意义(())相当于整数运算的常用运算符效率很高let用于整数运算类似(())expr可以用于整数运算但还有其他的额外功能bcLinux下的一个计算器程序(适合整数及小数运算)$[]用于整数运算awkawk即可用于整数运算也可以用于小数运算declare定义变量值和属性-i参数可以用于定义整形变量做运算
双小括号(())
运算操作符与运算命令意义((ii1))此写法为运算后赋值法即将i1的结果赋值给变量i。注意不能用echo ((ii1))的形式输出表达式的值但可以用echo $((ii1)i$((i1))可在(())符号前面加$符表示将表达式运算结果赋值给i((8755))可以进行比较操作还可以加入逻辑与和逻辑或用于条件判断echo $((21))需直接输出运算表达式的运算结果时可在(())前加$符
2. a和a的区别
a先计算1在赋值给a
a先对变量a操作再进行1
a5
echo $((a)) #结果是5先打印然后再1赋值给a
echo $a #结果是6
b5
echo $((b)) #结果是6先对b1再打印
echo $b #结果是6
7.3 expr命令
常用来做模式匹配用法
expr string : .* #string为字符串对象为固定格式表示匹配统计后面表达式的匹配到的长度。 .*这里.是固定的*为正则表达式可以根据需要修改。
7.4 bc工具
前面的字符通过管道符|交给bc来运算并打印返回结果
echo 3*3.5 | bc #返回结果10.5
7.5 awk命令
echo 2.2 3.5 |awk {print ($1 $2)}
八、条件判断
Shell中的 test 命令用于检查某个条件是否成立它可以进行数值、字符和文件三个方面的测试。
补充说明shell脚本中命令支持和||的用法表示前面的条件为真才执行||前面的条件不成立才执行。举例
test -e hello.txt echo 文件存在 || echo 文件不存在
test命令和[ ] 的使用判断里面的条件表达式是否为真为真则返回0,否则非0。
注意
1. [ ] 里面的条件在左右括号的前后必须有空格。
2. 在[ ]条件判断中变量引用必须加上双引号 。
3. [[ ]]双中括号的条件判断可以更灵活支持 和 || 逻辑运算符而[ ] 要实现逻辑表达需要使用 -a 或者 -o 分别表示and和or。表示非。
参数如下
8.1 数值测试
参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真
num1100
num2100
if test $[num1] -eq $[num2]
thenecho 两个数相等
elseecho 两个数不相等
fi
8.2 字符串测试
参数说明等于则为真!不相等则为真-z 字符串字符串的长度为零则为真-n 字符串字符串的长度不为零则为真
num1ru1noob
num2runoob
if test $num1 $num2
thenecho 两个字符串相等!
elseecho 两个字符串不相等!
fi
8.3 文件测试
参数说明-e 文件名如果文件存在则为真-r 文件名如果文件存在且可读则为真-w 文件名如果文件存在且可写则为真-x 文件名如果文件存在且可执行则为真-s 文件名如果文件存在且至少有一个字符则为真-d 文件名如果文件存在且为目录则为真-f 文件名如果文件存在且为普通文件则为真-c 文件名如果文件存在且为字符型特殊文件则为真-b 文件名如果文件存在且为块特殊文件则为真
cd /bin
if test -e ./bash
thenecho 文件已存在!
elseecho 文件不存在!
fi
九、条件判断
9.1. if语句来判断
#单条件循环
if [ ];then执行代码fi
#两条件循环
if [ ];then执行代码
else执行代码fi
#多条件循环
if [ ];then执行代码
elif [ ]执行代码
else执行代码
fi
9.2 case语句多条件模式匹配
#!/bin/bashecho 请输入一个数字 (1-3 或其他):
read numbercase $number in1|2|3)echo 你输入了一个 1 到 3 之间的数字;;[4-9])echo 你输入了一个 4 到 9 之间的数字;;[0-9]*)echo 你输入了一个多位数;;*)echo 你输入的不是一个数字;;
esac
双分号 (;;) 每个命令块以 ;; 结尾表示命令块的结束。最后一个命令块通常是默认情况可以省略 ;;。使用 esac esac 是 case 语句的结束标志是 case 的反向拼写。
十、函数
#函数的基本定义
function test(){定义函数的动作
}#函数调用
test
1. 函数必须先定义再执行从上往下执行
2. 函数体内定义的变量为局部变量仅在函数体内有效
3. 函数体内当有需要返回值时添加return语句作用是退出函数且将返回值赋值给调用程序在shell中通过$?获取其return的值
4.return语句和exit语句的差异
1return是退出函数只能写在函数中给出返回值
2exit是shell内置命令是退出shell脚本的执行并返回码
5. 函数如果单独写入一个文件里需要通过source读取
6.