"这是一份关于shell脚本的个人学习笔记,提炼了大量书籍的精髓,结合实例进行了详细的讲解,涵盖了从基础语法到高级特性的多个方面,旨在帮助读者掌握shell脚本编程技能。"
在shell脚本中,`echo`和`printf`是常用的输出命令,`echo -n`可以避免自动添加换行符。例如,`echo -n "Hello"`将打印"Hello"而不会换行。而`printf`更灵活,支持转义子字符序列,如`printf "%s\n" "Hello"`也会打印"Hello"并添加换行。
变量赋值时,`var=value`是在shell中定义变量,而`var=value`则表示比较操作。环境变量`$PATH`通常存储在多个配置文件中,如`/etc/environment`、`/etc/profile`或`~/.bashrc`,它指定了shell查找可执行文件的路径。
获取字符串长度可以用`${#var}`,如`echo ${#myString}`会输出字符串`myString`的长度。在shell中,`root`用户的UID为0,代表最高权限。
对于算术运算,`let`命令可以直接对变量进行整数运算,无需 `$` 符号,而`expr`同样处理整数。如果需要进行浮点数运算,可以借助`bc`命令,如`echo "scale=2; 3/2" | bc`将得到浮点数结果。
进制转换可以通过`bc`完成,例如,将二进制转换为十进制:`echo "obase=10; ibase=2; 1010" | bc`,反之亦然。
平方和平方根计算可以用`bc`,如`echo "sqrt(9)" | bc`得到3,`echo "9^2" | bc`得到81。
文本重定向常用`>`和`>>`操作,前者会覆盖文件内容,后者追加到文件末尾。例如,`echo "text" > file.txt`将清空`file.txt`并写入"text",`echo "more text" >> file.txt`会在原有内容后追加"more text"。
标准输入、输出和错误流分别对应文件描述符0、1和2,可以使用`<`、`>`和`>>`进行重定向。例如,`ls -l > output.txt 2>&1`会把命令输出和错误都重定向到`output.txt`。
bash从4.0版本开始支持关联数组,这是一种键值对的数组形式。`alias`命令可以创建命令别名,如`alias ll='ls -lh'`使得`ll`等同于`ls -lh`。
`date`命令用于显示日期和时间,`--date`选项接受日期字符串作为输入。例如,`date --date="yesterday"`会显示前一天的日期。
`sleep`命令用于延迟脚本执行,如`sleep 5`会让脚本暂停5秒。`tput`系列命令用于控制终端光标位置和清除屏幕。
在脚本开头使用`#!/bin/bash -xv`可以开启调试模式,便于查看每条命令的执行过程。括号`()`用于创建子shell,其中的命令会在新的环境中执行。
`read`命令用于从输入读取字符或整行。例如,`read -n 5 myVar`将读取5个字符并赋值给`myVar`,而`read -s`则可以在不显示输入的情况下读取密码等敏感信息。
这些知识点构成了shell脚本的基础,通过深入理解和实践,可以编写出强大的自动化脚本来简化日常任务。