深圳个性化网站建设公司电话seo网站课程
特殊变量
读取输入参数 $0~9
0为获取文件名称
如果获取第十个参数需要使用${10}
${#} 读取所有输入参数个数
$*
$@
上述都是获取所有输入参数
不使用双引号:功能一致
使用双引号括起来,上面为获取的所有参数拼接为一个字符串,格式为“$1,$2...”
下面的获取一组参数列表对象 "$1" "$2" ...
$? 用于获取上一个shell命令的退出状态码,或者函数返回值
每个shell命令的执行都有一个返回值,这个返回值用于说明命令执行是否成功
一般来说,返回0代表命令执行成功。
$$ 查看当前shell环境进程编号
shell环境分类
交互式与非交互式shell
交互式shell
与用户进行交互互动,效果是用户输入一个命令,shell立即反馈
非交互式shell
无需用户参与
登录shell与非登录
需要用户名密码的shell环境为登录环境
不同的工作环境加载环境变量流程不一样
字符串三种格式区别
双引号包含变量
单引号原样输出
不被引号包围和双引号一致,但是不能包含空格
字符串拼接:推荐使用双引号拼接
字符串截取
数组:在shell中,使用括号来表示数组,数组元素之间用空格来分隔
两种方式:
array_name=(item1 item2 ...)
array_name=([下标]=item1 ...)
note:等号之间不能由空格
数组内容可以是字符串
语法
获取下标元素值:${arr[index]}
获取所有元素:${arr[*]} 或者为${arr[@]}
获取数组长度:${#arr[*]}或者${#arr[@]}
获取数组指定元素字符长度:${#arr[索引]}
unset arr[index]删除数组指定元素
unset arr 删除整个数组
内置命令
shell内置命令,就是由Bash Shell 自身提供的命令,而不是文件系统可执行脚本文件
可以使用type确定一个命令是否为内置命令
type 命令
通常来说:内置命令会比外部命令执行更快,执行外部命令时会触发磁盘I/O,还需要fork出一个单独的进程
常见内置命令
alisa设置命令别名
不带参数显示当前所有shell进程中的别名列表
alias 别名=”命令“ 设置别名
unalias 别名 删除别名
unalias -a 删除所有别名
以上为临时删除,如果向永久删除必须去配置文件中删除
echo 输出字符串
默认换行输出 echo 字符串
不换行输出 echo -n 字符串
默认不解析转义字符
解析转义字符 echo -e 字符串
read读取控制台输入
从标准输入中读取数据并赋值给变量,如果没有重定向,默认从终端中读取,进行重定向可以从文件中读取
语法 read [-options] [var1 var2 var...]
var表示用来存储数据的变量
如果没有提供变量名,那么读取的数据放到‘REPLY’中
选项:
-n num 读取num个字符,而不是整行字符
-p prompt 显示提示信息,提示内容为prompt
-s 静默模式,不会再屏幕上显示输入字符
-t seconds 设置超时时间,单位为秒,如果没有在指定时间输入完成,那么read将会返回非零的退出状态,表示读取失败
exit 用于退出当前shell环境
返回一个状态码
用$?获取
应用场景,当文件执行出错的时候,可以返回不同的状态值来代表不同的错误
declare 设置变量
设置变量属性
declare [+/-] [aArxif] [变量名称=设置值]
declare -A 关联数组变量名=([字符串]=值 [字符串]=值)
查看全部shell变量和函数
实现关联数组变量
shell计算命令
expr命令详解:表达式求值
1.expr length 字符串 输出字符串长度
2.expr substr 字符串 start end 截取字符串
3.expr index 被查找字符串 需要查找的字符
正则表达式匹配
expr match 字符串 正则表达式
(())命令详解
进行整数的数学运算,使用$获取表达式命令的结果,这和使用$获取变量值是一样的
语法$((表达式))
(())内部自动解析变量,不使用$
let命令详解
let只能用于赋值计算,但没有(())功能强大,let只能用于赋值计算,不能直接输出,不可以条件判断
let 赋值表达式
let c=a+b
$[] 表示整数运算
bc命令
bc [options] [参数]
由于Bash shell内置了整数运算,Linux bc可以进行浮点运算
而且还可以进行进制的转换
-l 选项使用标准数学库
-q 不显示欢迎信息
参数为包含执行计算任务的文件
在shell内部,也是可以借助管道使用bc计算器的
语法:echo "expression" | bc [options]
expression必须符合bc命令的格式
里面可以引用shell里面的命令
将bc计算结果赋值给shell变量
第一种方式使用 ` 命令 `
第二种方式 $() 兼容性较差
shell中非互动式的输入重定向
将计算表达式输出给bc去执行,特点类似于文件中的输入
将EOF多行表达式输入给bc执行,然后将执行结果赋值给var_name
方式1:
var_name=`bc [-options] << EOF
第一行表达式
第二行表达式
EOF
`
方式2:
var_name=$(bc [-options] << EOF
第一行表达式
第二行表达式
EOF
)
流程控制语句
if语法一行 if 条件; then 命令; fi多行写法
if 条件
then命令
else命令
fiif elif else语法
if 条件
then命令
elif命令
else命令
fi
Linux任何命令的执行都会有一个退出状态,当它退出的时候,都会返回一个比较小的整数值给调用他的程序
test
功能
对整数比较测试
对字符串
对文件测试
test 数字1 options 数字2
整数比较
字符串比较
文件测试
case
case 值 in
匹配模式1)命令;;
匹配模式2)命令;;
esac
while循环
while 条件
do命令continue; #表示结束本次循环break; 表示结束当前循环
done
until语句
循环条件同while相反,循环为false才会一直循环
until 条件
do命令continue; #表示结束本次循环break; 表示结束当前循环
done
for语句
for var in test1 test2 test3
do命令
donefor var in {start..end}
do命令
done
select语句
使用select进行菜单选择操作
select var in menu1 menu2 ...
do命令
donenote:select式无限循环,输入空值,或者输入的值无效都不会结束循环,只有遇到break才会结束循环
shell函数
系统函数
函数是有若干shell命令组成的语句块
basename函数
用于获取文件名
basename [string / pathname] [suffix]
dirname
从指定文件绝对路径,去除文件名,返回剩下的目录
自定义函数
语法
[ function ] funname()
{
命令
[return 返回值]
}
调用函数:funname 传递参数1 传递参数2...
return 如果不加,将以最后一条命令运行结果作为返回值,(范围为0~255)
有参函数
shell程序与函数区别
shell程序在子shell中运行,会开启独立的进程运行
shell函数在当前shell的进程中运行
shell重定向
每个Linux系统在运行的时候都会打开三个文件
1.stdin 获取键盘输入数据,文件描述符 0
2.stdout 将正确数据输出到显示器上 1
3.stderr 将错误信息输入到显示器上 2
改变输入方向,数据从非键盘位置流入,这就是输入重定向
改变输出方向,数据从非显示器位置流出,这就是输出重定向
语法如下
shell好用的工具
cut
使用cut可以切割提取指定列,字符,字节的数据,可以将文本按列进行划分,cut命令逐行读入文本,然后按列划分
cut [options] filename
sed
流编辑器,非交互流式文本编辑器 vim是交互式文本编辑器
语法:sed [选项参数] [模式匹配/sed程序命令] [文件名]
$代表最后一行
案例:
删除奇数行
sed ‘1~2d’ sed.txt
删除1到3行
sed '1,3d' sed.txt
删除最后一行
sed '$d' sed.txt
删除匹配ww的行
sed ‘/ww/d’ sed.txt
查询匹配的内容
sed -n '/ww/p' sed,txt
替换ww为jj
sed ‘s/ww/jj/g’ sed,txt
这里的g表示全局替换
sed -e 第一个命令 -e 第二个命令 sed.txt
或者在命令中以分号隔开
sed缓存区数据交换
sed处理文件是逐行处理的
sed没读取一行,就存放进入模式空间,sed还有一个空间叫做暂存空间,开始时只有一个空行
使用sed命令可以实现这两个空间数据的交互
awk
强大的文本分析工具
语法 awk [options] 'pattern{action}' {filename}
打印文件第二行
awk -F ":" 'NR==2{printf("filename:%s\n","FILENAME")}' passwd
sort
排序
sort (options)参数
根据第二列内容进行排序
sort -t " " -k2n,2 -uk1,2 sort.txt