Linux shell

来源:互联网 发布:什么是java多线程 编辑:程序博客网 时间:2024/06/06 09:45
  • 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 varecho{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; #传递参数
12 第2个参数
@1 23 …
@*将所有的参数单过单个字符串,很少别使用.

支持递归
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.

".
作为添加的后缀扩展为当前运行脚本的进程ID

  • 文件名和扩展名

借助%
可以轻松的从名称.扩展名 格式中提取出文件名
提取扩展名使用 #

file_jpg%.* 含义删除位于%右侧的通配符 非贪婪操作
file_jpg#.* 含义删除位于#左侧的通配符

%%就是贪婪操作

grep 中^标志着单词的开始 $标志着结束

0 0
原创粉丝点击