shell常用的命令
- 检查系统环境变量的命令
- set 列出所有变量(包括全局变量,和局部变量)
- 【set | grep ^PATH】 #查找有关PATH的变量
- env 只显示全局变量
- 【env |wc -l】#显示有多少个全局变量
- declare 输出所有的变量 如同set
- export 显示和设置环境变量值
- 撤销环境变量
- unset 变量名 #删除变量名或者函数
- 设置只读变量
- readonly #只有shell结束,只读变量才会失效
- 【readonly age="123"】
例:过滤出,格式化所有的liunx环境变量
export |awk -F ‘[ :=]’ ‘{print $3}’ #-F指定分隔符[ :=],$3表输出第三列
- 特殊参数变量
- $0 #获取文件名称,以及脚本地址
- $n #获取脚本的第n个参数
- $# #获取执行shell脚本的参数总个数
- $* #获取shell所有的参数,用一个大的双引号包住全部参数 一起输出
- $@ #获取shell所有的参数,每个参数都会包含一个双引号,成为一个独立的个体输出。
bash text.sh 参数1 参数2 参数3
[root@VM-4-11-centos liuzc]# tail text.sh!/bin/bash
echo $0
echo $1
echo $#
echo $*
echo $@
[root@VM-4-11-centos liuzc]# bash text.sh liu zhi cheng 18 200
text.sh
liu
5
liu zhi cheng 18 200
liu zhi cheng 18 200
- 特殊状态变量
- $?上一次命令执行状态返回值,0正确,非0失败
- $$当前she11脚本的进程号
- $!上一次后台进程的PID
- $_ .再次之前执行的命令,最后一个参数
- 统计变量字串长度
- 用 特殊参数# –这个是最快的。
[root@VM-4-11-centos liuzc]# name=’liuzhicheng’
[root@VM-4-11-centos liuzc]# echo ${#name}
11 - wc -l 统计变量字符串长度 -l 表示统计行数 -L 表示统计最长一行的字符数量
[root@VM-4-11-centos liuzc]# cat text.sh!/bin/bash
name="liuzhicheng"
1234
1234567
123456789
echo $0
echo $1
echo $#
echo $*
[root@VM-4-11-centos liuzc]#
[root@VM-4-11-centos liuzc]# cat text.sh |wc -l
9
[root@VM-4-11-centos liuzc]# cat text.sh |wc -L
18 - expr统计变量长度
- 用法:expr length 变量
[root@VM-4-11-centos liuzc]# name=’liuzhicheng’
[root@VM-4-11-centos liuzc]# expr length "${name}"
11 - awk命令统计变量长度
[root@VM-4-11-centos liuzc]# name=’liuzhicheng’
[root@VM-4-11-centos liuzc]# echo ${name} | awk ‘{print length($0)}’
11
- 用 特殊参数# –这个是最快的。
- 统计命令执行的时长
- 字符串长度统计方法这么多,谁最快?
time命令,统计命令执行时长
for循环的shell编程知识,
语法
for number in {1. .100}
do
echo $number
done
写在一-行的方法
for num in {1. .100};do echo $num; done- seq生成序列
seq -s “~~~” 10 表示生成10个序列 - time的用法
- 语法: time 变量
- [root@VM-4-11-centos liuzc]# time for n in {1..100}; do num=seq -s "
~" 10;echo ${num};done
[root@VM-4-11-centos liuzc]# time for n in {1..100}; do num=seq -s "~" 10;echo ${num};done
real 0m0.138s
user 0m0.072s
sys 0m0.061s - 这里的 &>/dev/null 表示命令后台运行 并且结果写在/dev/null这个黑洞文件中
- time for n in {1..100}; do num=seq -s "
~" 10;echo ${num} &>/dev/null;done
- seq生成序列
- 字符串长度统计方法这么多,谁最快?
- 字符串截取 (是通配符)
${变量#匹配字段} 一个#表示从开头删除最短匹配字段
${变量##匹配字段} 两个##表示从开头删除最长匹配字段
实例:
[root@VM-4-11-centos liuzc]# name="abcABD123AB456abc"
[root@VM-4-11-centos liuzc]# echo ${name#ac}
ABD123AB456abc
[root@VM-4-11-centos liuzc]# echo ${name##ac}
${变量%匹配字段} 一个%表示从变量结尾删除最短匹配字段
${变量%%匹配字段} 两个%%表示从变量结尾删除最长匹配字段
[root@VM-4-11-centos liuzc]# echo ${name%ac}
abcABD123AB456
[root@VM-4-11-centos liuzc]# echo ${name%%a*c} - 替换字符串
${变量/原字段/新字段} 一个/表示只替换变量最近的一个字段
${变量//原字段/新字段} 两个//表示替换变量全部字段
[root@VM-4-11-centos liuzc]# str="I shi yi ge da sha bi T"
[root@VM-4-11-centos liuzc]# echo ${str/shi/就是}
I 就是 yi ge da sha bi T
[root@VM-4-11-centos liuzc]# echo ${str//i/O}
I shO yO ge da sha bO T - 批量修改文件名
- 【准备测试数据,想批量把_finished去掉】
- 用touch命令新建几个图片文件
[root@VM-4-11-centos text]# touch liuzhicheng_{1..5}_finished.jpg [root@VM-4-11-centos text]# ll total 0 -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_1_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_2_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_3_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_4_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_5finished.jpg [root@VM-4-11-centos text]# touch liuzhicheng{1..5}_finished.png - 1利用mv命令 ,手动修改文件名效率低
[root@VM-4-11-centos text]# mv liuzhicheng_1_finished.jpg liuzhicheng_1.jpg [root@VM-4-11-centos text]# ll total 0 -rw-r–r– 1 root root 0 Jul 26 00:22 liuzhicheng_1_finished.png -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_1.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_2_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:22 liuzhicheng_2_finished.png -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_3_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:22 liuzhicheng_3_finished.png -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_4_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:22 liuzhicheng_4_finished.png -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_5_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:22 liuzhicheng_5_finished.png - 2利用变量的子串,替换命令${变量//原字段/新字段},来修改文件名
[root@VM-4-11-centos text]# f=liuzhicheng_1_finished.png [root@VM-4-11-centos text]# echo ${f} liuzhicheng_1_finished.png [root@VM-4-11-centos text]# echo ${f//_finished/} liuzhicheng_1.png [root@VM-4-11-centos text]# - 3找出所有的这个文件名的文件
[root@VM-4-11-centos text]# ll fin.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_2_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_3_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_4_finished.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_5_finished.jpg [root@VM-4-11-centos text]# - 4结合for循环
- 成功批量修改.jpg文件名
- for file_name in
ls *fin*jpg
;do mv $file_nameecho ${file_name//_finished/}
;done
[root@VM-4-11-centos text]# for file_name inls *fin*jpg
;do mv $file_nameecho ${file_name//_finished/}
;done [root@VM-4-11-centos text]# ll *.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_1.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_2.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_3.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_4.jpg -rw-r–r– 1 root root 0 Jul 26 00:21 liuzhicheng_5.jpg [root@VM-4-11-centos text]#
- 扩展变量的用法
- 扩展变量的用法案例
[root@VM-4-11-centos text]# find ${dir_path:=/data/mysql_back_data/} -name ‘*.tar.gz’ -type f -mtime +7|xargs -rm -f
shell常用的命令