Linux Shell 脚本攻略 chap 1 小试牛刀

47 篇文章 0 订阅
1 篇文章 0 订阅

1. 简介

  1. 一般在shell 脚本的起始, 需要指定解释器的路径
    #! /bin/bash
  1. 使用 # 作为注释标记符
  2. shell 脚本如果需要执行, 必须添加 执行(x) 权限, 一般可以 chmod a + x xxx.sh
  3. shell 的设置文件
    • ~/.bashrc
    • ~/.bash_profile
    • ~/.bash_history

2. 终端打印

  1. 双引号中的特殊字符需要使用 转义符 显示的进行转义, 而单引号中不用
  2. echo 默认会在输出之后添加换行符, 而 printf 不会
  3. printf 用法与 C 语言, python 中非常类似
  4. echo 中 使用 -e 显示激活转义效果, 使用 -n 忽略结尾的 换行符
  5. 彩色输出:
    • 格式: echo -e "\e[1; Nm xxxx \e[0m"
    • N 的取值范围: 30 ~ 37 前景色, 40 ~47 背景色

3. 玩转变量和环境变量

  1. 查看进程运行时变量:
    • cat /proc/$PID/environ; (其中, PID 为进程id)
    • 可以使用 pgrep 查看进程 的 id
    • 使用 这个方式得到的环境变量可读性不好, 改用下面的指令, 将’\0’ 改为换行分割
      • cat /proc/$PID/environ | tr '\0' '\n'
  2. 变量操作:
    • 赋值: var=value, ps: 等号两侧不能有空格
    • 引用变量: ${var}, $var
  3. 设置环境变量
    • export xxx, 从当前shell 脚本执行的任何应用程序都会继承这个变量
  4. 获取字符串长度, ${#var}
  5. 识别当前shell, $SHELL, $0
  6. 检测用户是否为超级用户: $UID
  7. 修改bash 命令提示符 : PS1="xxx"
    • centos 7 中关于 PS1 的默认配置在 /etc/bashrc 中, 环境配置在 /etc/profile 中

4. 使用函数添加环境变量

  1. PATH 用于检索可执行文件, LD_LIBRARY_PATH 用来搜索库文件
  2. eval, 会对参数多处理一次, 先对变量进行变量的替换, 然后在对替换后的语句执行一个shell 操作
  3. 使用方法:
#先在.bashrc- 中加入函数
prepend() {[-d "$2"] && eval $1=\"$2\$\{$1:+':'\$$1\}\" && export $1; }

# 调用形式:
prepend PATH /opt/myapp/bin
prepend LD_LIBRARY_PATH /opt/myapp/lib

其中, ${parameter:+expression} 表示: 如果parameter 有值 且不为空, 就使用 expression 的值

5. 使用shell 进行数学运算

  1. 主要使用 let, (()), [] 执行基本的算术操作, 使用 expr, bc 执行高级操作
  2. expr 只能用于整数运算, 而 bc 支持浮点数(支持设定小数精度, 进制转换etc)

6. 玩转文件描述符及重定向

  1. 文件描述符是与文件输入, 输出相关联的整数, (stdin : 0, stdout: 1, stderr:2)
  2. 显示退出状态: echo $?
  3. 为了保证屏幕上没有不必要信息, 可以使用重定向, 比如将错误信息重定向到 /dev/null 中
  4. 使用 tee 可以将数据重定向到文件, 同时又可以提供一份重定向数据的副本作为后续指令的stdin
    • tee 默认会覆盖文件内容, 使用 -a 参数可以追加内容
  5. 文本中的文本块的重定向:

    #! /bin/bash
    cat << EOF > log.txt
    xxx
    EOF

    通过指定 EOF 为结尾标志, 将从cat << EOF 开始, 到 EOF 结束的文本, 重定向到 log.txt 中
  6. 可以使用 exec 自定义文件描述符 (先声明, 在引用 &n)

7. 数组和关联数组

  1. 默认数组下标从 0 开始
  2. 打印数组所有值 echo ${array[*]}; echo ${array[@]}
  3. 打印数组长度: echo ${#array[*]}
  4. 关联数组
    • 首先声明一个数组: declare -A array, 然后赋值, 引用(类似 C++ 中的 map)

8. 使用别名

  1. 使用 alias 定义别名
  2. 使用 转义 \command, 来忽略别名设置

9. 获取终端信息

  1. 使用 tput 和 stty 两款中断处理工具

10. 获取,设置日期和延时

  1. 使用指令 date, 根据不同参数, 可以获取不同的日期格式
  2. 延时 使用 sleep n

11. 调试脚本

  1. bash 支持调试, bash -x xxx.sh
  2. 可以通过修改 #! /bin/bash -xv 达到启动调试的目的
  3. 下面这段代码蛮喜欢的:
    这里写图片描述

12. 函数和参数

    $n  # 第 n 个参数
    $@  # 被扩展成  $1 $2 $3
    $*  # 变成一个字符串
    $?  # 得到命令的返回值

13. 将命令序列的输出读入变量

  1. 使用管道并利用子shell 的方式将多个文件连接起来
  2. 获取 子shell 的输出:
cmd_output = $(ls | cat -n)
cmd_output = `ls | cat -n` 

14. 不使用回车键读取n 个字符

  1. 主要使用 read

15. 运行命令直至执行成功

  1. 定义函数 repeat() 加入延时的版本
    repeat() {while :; do $@ && return; sleep 30; done}

16. 字符分隔符和迭代器

  1. 通过设置 IFS 可以指定 字符分割符
  2. 迭代器: for 循环, while, until(类似 do while)

17. 比较和测试

  1. if 判断, 以 fi 结尾
  2. 算术比较 []:
    • -gt, -lt, -ge, -le
  3. 文件系统测试相关 []:
    -f, -x, -d, -e, -c, -b, -w, -r, -L
  4. 字符串比较 [[]]
  5. 使用test 可以用来表示执行条件检测, 优势在于可以避免使用过多的括号
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值