shell常用的命令

shell常用的命令

  1. 检查系统环境变量的命令
    • set 列出所有变量(包括全局变量,和局部变量)
    • 【set | grep ^PATH】 #查找有关PATH的变量
    • env 只显示全局变量
    • 【env |wc -l】#显示有多少个全局变量
    • declare 输出所有的变量 如同set
    • export 显示和设置环境变量值
  2. 撤销环境变量
    • unset 变量名 #删除变量名或者函数
  3. 设置只读变量
    • readonly #只有shell结束,只读变量才会失效
    • 【readonly age="123"】
      例:过滤出,格式化所有的liunx环境变量
      export |awk -F ‘[ :=]’ ‘{print $3}’ #-F指定分隔符[ :=],$3表输出第三列
  4. 特殊参数变量
    • $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

  5. 特殊状态变量
    • $?上一次命令执行状态返回值,0正确,非0失败
    • $$当前she11脚本的进程号
    • $!上一次后台进程的PID
    • $_ .再次之前执行的命令,最后一个参数
  6. 统计变量字串长度
    • 用 特殊参数# –这个是最快的。
      [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
  7. 统计命令执行的时长
    1. 字符串长度统计方法这么多,谁最快?
      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
  8. 字符串截取 (是通配符)
    ${变量#匹配字段} 一个#表示从开头删除最短匹配字段
    ${变量##匹配字段} 两个##表示从开头删除最长匹配字段
    实例:
    [root@VM-4-11-centos liuzc]# name="abcABD123AB456abc"
    [root@VM-4-11-centos liuzc]# echo ${name#a
    c}
    ABD123AB456abc
    [root@VM-4-11-centos liuzc]# echo ${name##ac}
    ${变量%匹配字段} 一个%表示从变量结尾删除最短匹配字段
    ${变量%%匹配字段} 两个%%表示从变量结尾删除最长匹配字段
    [root@VM-4-11-centos liuzc]# echo ${name%a
    c}
    abcABD123AB456
    [root@VM-4-11-centos liuzc]# echo ${name%%a*c}
  9. 替换字符串
    ${变量/原字段/新字段} 一个/表示只替换变量最近的一个字段
    ${变量//原字段/新字段} 两个//表示替换变量全部字段
    [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
  10. 批量修改文件名
    • 【准备测试数据,想批量把_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_name echo ${file_name//_finished/} ;done
      [root@VM-4-11-centos text]# for file_name in ls *fin*jpg;do mv $file_name echo ${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]#
  11. 扩展变量的用法
  • 扩展变量的用法案例

[root@VM-4-11-centos text]# find ${dir_path:=/data/mysql_back_data/} -name ‘*.tar.gz’ -type f -mtime +7|xargs -rm -f

shell常用的命令

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
桂ICP备2023008908号-1