- bash
bash中每个命令使用分号或者换行符来分隔的。
echo每次调用会添加个换行符。带不带双引号或者单引号效果相同,但各自有特殊用户和副作用。
如果希望打印不要放到“”中
使用不带引号的echo时,没法在所要显示的文本中使用
单引号不会对引号中变量求值 $var ,仅是按照原样显示
终端打印 printf,参数和C语言一样.可以进行格式化对齐.
echo -n 忽略结尾的换行符.
- 彩色打印输出
重置 0
黑色 30
红色 31
绿色 32
黄色 33
蓝色 34
洋红 35
青色 36
白色 37
echo -e “\e[1;31m This is red text \e[0m”
设置彩色背景
重置
黑色 40
红色 41
绿色 42
黄色 43
蓝色 44
洋红 45
青色 46
白色 47
echo -e “\e[1;42m This is red text \e[0m”
- 变量和环境变量
变量的赋值
var=value
value不包含任何的空白字符,否则需要单引号或双引号
var=value
var = value
不同,前者是个赋值操作后者是个相等操作.
打印结果 echo
var或者echo
{var}
标准的环境变量
PATH
echo $PATH
HOME
PWD
USER
UID
SHELL
获得字符串的长度
echo ${#var}
检查是否是超级用户
if [ $UID -ne 0 ];then
echo Non root user
else
echo root user
fi
root用户的UID为0
- 数学运算
let 可以直接进行基本的算数运算,let时,变量名前不需要添加$
expr 同样用于基本算数操作
result=’expr 3+4’
仅支持整数运算,不支持浮点运算.
bc进行高级运算
- 成功和不成功的命令
当一个命令发送错误并退出时,返回一个非0 的状态.命令成功时返回0.
退出状态可以从echo $? 中获得
/dev/null 清除
- 数组的使用
定义数组
array=(1 2 3 4 5 6)
或者
array[0]=”t0”
array[1]=”t1”
- 调试脚本
sh -x script.sh
-x 将脚本中执行过的每一行命令及当前状态输出来.
- 函数和参数
定义函数 function fname()
{
Statement;
}
或者
fname()
{
statement;
}
fname arg1 arg2; #传递参数
1第一个参数
2 第2个参数
@扩展为
1
2
3 …
@用的最多
*将所有的参数单过单个字符串,很少别使用.
支持递归
fork炸弹
:(){:|:&};:
- read命令从键盘中读取文本
read -n str #确定读取的个数
read -s 用不回显的方式读取密码
read -s var
read -p “please input” var #含有提示信息
read -t 2 var #在2s内将字符串读入变量
- 比较和判断
条件通常放在一个封闭的中括号内,注意[]与操作数间有一个空格,忘记空格报错.
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
逻辑与 -a
逻辑或 -o
字符串比较时,最好使用双中括号,有还单中括号会参数错误.
移除空白行
cat test.sh | tr -s ‘\n’
录制终端会话
script -t 2> timing.log -a output.session
.log文件存储时序信息
.session文件存储命令的输出 -t 将时序导入stderr 2>将stderr 重定向到.log
播放终端会话
scriptreplay timing.log output.session
- find 使用
-name
-inmame #忽略字母大小写
-path 将文件路径作为整体进行匹配
-maxdepth 最大深度
-mindepth 最小深度
-type 对文件进行过滤 d 目录 f 普通文件 l 符号链接
-size 根据文件大小进行选择 +2k 大于2k -2k 小于2k 除了k 还有 b块 512字节 c字节
-delete 删除匹配的文件
find . -type f -name “*.swap” -delete
-perm 根据文件权限
-user
-exec find 借助exex与其他命令进行结合
find . -type f -user root -exec chown zjhua {} \
{}作为特殊字符串 -exec结合使用,对于每个匹配的文件会被替换成相应的文件名
find ~ -type f -name “*.c” -exec ls {} \;>result
xargs 将stdin接收的数据重新格式化 将换行符移除然后换成 空格
每行的最大数量n -n 5
-d 输入定制的定界符
- tr命令进行转换
tr [option] set1 set2
将来自stdin的输入字符从set1映射到set2中
大写替换为小写
echo “WERHHH” | tr “A-Z” “a-z”
tr删除字符
-d指定要删除的字符
-c 使用补集
将不在补集中的数据全部删除
echo “sdfkjs 1 2” | tr -d -c “0-9 \n”
压缩字符串
-s 压缩重复的字符
- 校验和
何时数据的完整性
md5sum -c test.sh.md5
命令会输出是否校验成功的信息
- sort和uniq
对一组文件进行排序
sort q.txt a.txt >sort.txt
cat sort.txt | uniq >uniq.txt
sort -n 按照数字进行排序
-r 按照逆序进行排序
-M 按照月份进行排序
按照列进行排序
-k 按照列进行排序
sort -u 仅显示唯一行
统计各行中出现的次数
uniq -c
-d 找出重复的行
-s 忽略前N个字符
-w 用于比较的字符数
输入 ahebhaaa
输出 4a1b1e2
cat input | sed ‘s/[^.]/&\n/g’ | sed ‘/^$/d’ | sort | uniq -c | tr -d ‘\n’
- 临时文件命名和随机数
/tmp 目录中内容将在系统重启后清空
tem_file=”./var.
- 文件名和扩展名
借助%
可以轻松的从名称.扩展名 格式中提取出文件名
提取扩展名使用 #
file_jpg%.* 含义删除位于%右侧的通配符 非贪婪操作
file_jpg#.* 含义删除位于#左侧的通配符
%%就是贪婪操作
grep 中^标志着单词的开始 $标志着结束