wordpress个人支付接口,整站seoseo优化,福田蒙派克10座黄牌报价,网站备案 个人组网方案特殊变量
位置参数的获取
$0 获取shell脚本文件名#xff0c;以及脚本路径#xff1b;$n 获取shell脚本的第n个参数#xff0c;n在1#xff5e;9之间#xff0c;如$1$2$9,大于9则需要写 ${10}#xff1b;$# 获取执行的shell脚本后面的参数总个数#xff1b;$* 获取she…特殊变量
位置参数的获取
$0 获取shell脚本文件名以及脚本路径$n 获取shell脚本的第n个参数n在19之间如$1$2$9,大于9则需要写 ${10}$# 获取执行的shell脚本后面的参数总个数$* 获取shell脚本所有参数不加引用等同于¥作用加上引号$ 作用是 接收所有参数为单个字符串$ 不加引号效果同上加引号是接收所有参数为独立字符串如$1 “$2” “$3” …空格保留
特殊状态变量
$? 上一次命令执行状态返回值0正确非0失败$$ 当前shell脚本的进程号$! 上一次后台进程的PID$_ 取得上次执行命令的最后一个参数
查找方式 man bash 搜索Special Parameters
# $# 获取参数个数 -ne不等于
[ $# -ne 2] {echo must be two argsexit 119 # 终止程序运行且返回119状态码提供给当前shell的#变量若是在函数里 可以return 119 用法
}
echo ok怎么让程序后台执行 nohup xxx 1 /dev/null
shell子串
bash一些基础的内置命令
echo
eval
exec
export
read
shiftecho命令
-n 不换行输出
-e 解析字符串中的特殊符号\n 换行
\r 回车
\t 制表位 四个空格
\b 退格echo
# 默认换行
echo 你好;echo 你坏
你好
你坏# 不换行打印
echo -n 你好;echo -n 你坏
你好你坏# -e
echo -e 我喜欢\n你
我喜欢
你# 打印命令
printf 你好\t我是\t老猫\n
你好 我是 老猫
eval
执行多个命令
eval ls;cd /tmp
# 先执行ls
# 后执行cd /tmpexec
不创建子进程执行后续命令且执行完毕后自动exit
shell子串的花式用法
namelaomao
${变量} 返回变量值
${name} laomao
${#变量} 返回变量长度字符长度-------------很重要
${#name} 6
${变量:start} 返回变量offset数值之后的字符
${name:4} ao
${变量:start:length} 提取start之后的字符且包含start的数字
${name:4:1} a
${变量#word} 从变量开头删除最短匹配的word子串
${name#lao} mao
${变量##word} 从变量开头删除最长匹配的word
${name##laom} ao
${变量%word} 从变量结尾删除最短的word
${name%ao} laom
${变量%%word} 从变量结尾开始删除最长匹配的word
${name%%}
${变量/pattern/string} 用string代替第一个匹配的pattern
${变量//pattern/string} 用string代替所有的pattern计算变量长度的各种玩法
多种统计长度的命令统计命令执行速度
# 使用wc命令参数用法
## 输出行数
echo $name | wc -l
cat test.txt | wc -l
## 找出最长的一行并输出它的长度
echo $name |wc -L
cat test.txt | wc -L# 利用数值计算expr命令
expr length ${name}# awk统计长度length函数
echo ${name} | awk {print length($0)}# 最快的统计方法
echo ${#name}字符串长度统计方法这么多谁最快
time命令统计命令执行市场 for循环的shell编程知识 语法
for number in {1..100}
doecho $number
done
#写在一行的方法
for num in {1..100};do echo $num;done统计执行时长
#seq生成序列的命令
seq 10 # 默认使用回车分隔
seq -s : 10 # 使用:分隔
# 输出结果
1:2:3:4:5:6:7:8:9:10for n in {1..3};do str1seq -s : 10;echo $str1;done
# 结合time命令
time for n in {1..10000};do charseq -s laomao 100;echo ${#char} /dev/null;done
# 输出结果
real 0m7.884s # 实际运行的时间
user 0m2.211s # 用户态执行的时间
sys 0m5.933s # 内核态执行的时间time for n in {1..10000};do charseq -s laomao 100;echo ${char}wc -L /dev/null;done
real 0m8.537s
user 0m2.795s
sys 0m6.002stime for n in {1..10000};do charseq -s laomao 100;expr length ${char} /dev/null;done
real 0m14.139s
user 0m3.325s
sys 0m11.623stime for n in {1..10000};do charseq -s laomao 100;echo ${char}awk {print length($0)} /dev/null;done
real 0m8.666s
user 0m3.270s
sys 0m6.057sshell编程尽量使用linux内置的命令内置的操作和内置的函数效率最高C语言开发效率最高尽可能减少管道符的操作
字符串截取
# 从开头删除匹配最短
## 从开头删除匹配最长
% 从结尾删除匹配最短
%% 从结尾删除匹配最长# 指定字符内容截取
a*c 匹配开头为a中间任意个字符结尾为c的字符串
a*C 匹配开头为a中间任意个字符结尾为C的字符串# 替换
echo ${str1/man/boy} # 把man改成boy
echo ${str1//man/boy} # 把所有man改成boy
# 不会修改原有字符串批量删除文件名后缀
单个文件去掉字符
mv laomao_1_finished.jpg laomao_1.png利用变量的子串功能去掉字符信息
flaomao_1_finished.jpg;echo ${f//_finished/}利用反引号
mv $f echo ${f//_finished/}批量替换文件名只修改所有的jpg文件
for file_name in ls *fin*jpg;do mv $file_name echo ${file_name//_finished/} ;done特殊shell扩展变量(只对变量值为空时起作用有值直接赋值)
这四个扩展变量都属于对变量的值进行判断、处理 变量的处理
如果parameter变量值为空返回word字符串赋值给result变量
result${parameter:-word}如果para变量为空则word替代变量值且返回其值
result${parameter:word}如果para变量为空word当作stderr输出否则输出变量值
用于设置变量为空导致错误时返回的错误信息
result${parameter:?word}如果para变量为空什么都不做否则word返回
result${parameter:word}案例 :- echo $laomao
result${laomao:-miaomiao}
echo $laomao # laomao为空 miaomiao
echo $laomao # laomao有值laomao的值直接赋值给result: echo $laomao
result${laomao:miaomiao}
echo $laomao # miaomiao
echo $result # miaomiao: echo $laomao
result${laomao:miaomiao}
echo $laomao # miaomiao
echo $result # miaomiao:? echo $laomao
echo ${laomao:?该变量值为空} # 有值输出值无值输出 该变量值为空: echo ${laoamo:miaomiao} # 无值什么都不做有值输出miaomiao实际应用
数据备份删除过期数据的脚本
find xargs 搜索且删除
# 删除7天以上的过期数据
find 需要搜索的目录 -name 你要搜索的文件名字 -type 文件类型 -mtime 7|xargs rm -fcat del_data.sh# 没有判断路径是否为空
find ${path} -name *.tar.gz -type f -mtime 7|xargs rm -f父子shell
source和点执行命令只在当前的shell环境中执行生效通过bash解释器执行脚本是开启subshell开启子shell运行脚本命令./script都会指定shebang通过解释器运行也是开启subshell运行命令。
父shell
pstree看到的结果就是父shell环境
pstree
├─sshd───sshd───sshd───bash───bash───pstreeps进程管理命令查看
ps -ef
-f 显示UIDPIDPPID【PID 进程号 PPID子进程号】
-e 列出所有进程的信息如同-A选项optionps -ef --forest创建进程列表创建子shell执行命令
需要执行一系列的shell命令
ls ;cd ;pwd; echo laomao列表是被包括起来的数据 shell的进程列表理念需要使用 () 小括号如下执行方式就称为进程列表 (cd ~;pwd;ls;cd /tmp/;pwd;ls)检测是否在子shell环境中
linux默认的有关shell的变量该变量的值特点如果是0就是在当前shell环境中执行的否则就是开辟子shell去运行的
BASH_SUBSHELL未开启子shell运行的命令
cd ; ls ;pwd; echo $BASH_SUBSHELL
# 返回0没有使用子shell开启子shell运行的命令
(cd;ls;pwd;echo $BASH_SUBSHELL)
# 返回1在子shell中运行子shell嵌套运行
一个小括号开启一个子shell运行命令还可以嵌套多个
(pwd;(pwd;(echo $BASH_SUBSHELL)))
# 返回3利用括号开启子shell的理念以及检查在shell脚本开发中经常会用子shell进行多进程的处理提高程序并发执行效率。
内置命令、外置命令
shell linux指令 内置命令在系统启动时就加载入内存常驻内存执行效率更高但是占用资源cd 外置命令用户需要从硬盘中读取程序文件再读入内存加载 外置命令
也称之为自己单独下载的文件系统命令处于bash shell之外的程序。
/bin
/usr/bin
/sbin
/usr/sbin通过linux的type命令验证是否是内置外置命令
外置命令一定会开启子进程执行 ps -f --forest
内置命令
内置命令不会产生子进程去执行内置命令和shell是为一体的是shell的一部分不需要单独去读取某个文件系统启动后就执行在内存中了。
查看linux系统中的内置命令compgen -b