shell脚本运行方式
$sh script.sh $sh /home/path/script.sh $chmod a+x script.sh ; $./script.sh
echo的三种使用方式
echo hello world 不能包含一些特殊关键字,如分号;
echo "hello word" 不能包含一些特殊字符,比如!
echo ‘hello word" 包含‘$var‘变量不能被求值
echo默认会将一个换行符追加到输出后,如果想禁止,可以使用-n这个选项
如果想要使某些转义字符生效,则可以使用-e这个选项,如
echo "\ta\tb" 会输出 \ta\tb
echo -e "\ta\tb" 则会输出 a b
显示某些进程的环境变量
[[email protected] ~]$ pgrep bash 3182 [[email protected] ~]$ cat /proc/3182/environ USER=hadoopLOGNAME=hadoopHOME=/home/hadoopPATH=/usr/local/bin:/bin:/usr/binMAIL=/var/mail/hadoopSHELL=/bin/bashSSH_CLIENT=192.168.1.1 5649 22SSH_CONNECTION=192.168.1.1 5649 192.168.1.10 22SSH_TTY=/dev/pts/0TERM=vt100SELINUX_ROLE_REQUESTED=SELINUX_LEVEL_REQUESTED=SELINUX_USE_CURRENT_RANGE=
算术运算
使用 let、(())、[]执行基本的算术运算。
如let a = b+c; let a++;let a--;
也可以使用[], a=$[b+c]; a=$[$b+5]
也可以使用(()),不过都需要在变量前加上$
删除变量:unset
tee
tee命令:以stdin作为输入,将其输入到某个文件中,并原样输出
显示变量
set 显示当前shell的变量,包括当前用户环境变量和自己定义的变量
env 显示当前用户环境变量
export 显示当前导出成用户变量的shell变量
关联数组即 Map
[[email protected] ~]$ declare -A map_array [[email protected] ~]$ map_array[index1]=val1 [[email protected] ~]$ map_array[index2]=val2 [[email protected] ~]$ echo ${map_array[*]} val1 val2 [[email protected] ~]$ echo ${!map_array[*]} index1 index2
cat
作用:读取、显示、拼接文件内容。
将AB两个文件内容一块输出 [[email protected] ~]$ cat A B
将输入文本与A一块显示 [[email protected] ~]$ echo "Hello" | cat - A
压缩空白行 cat -s A
将制表符显示为^| cat -T A
显示文本行号 cat -n A
find
作用:查找路径及子路径下所有的文件和文件夹
查找script目录下所有的文件
[[email protected] ~]$ find script/ script/ script/timing.log script/output.session
根据文件名或正则表达式匹配搜索
[[email protected] ~]$ find script/ -name "t*" #必须用引号括起来 [[email protected] ~]$ find script/ -iname "t*" #忽略文件名的大小写
可以用OR连接多个条件
[[email protected] ~]$ find script/ \( -name "t*" -o -name "out*" \)#注意空格 script/timing.log script/output.session
可以使用参数指定查找深度
-maxdepth 1 #指定查找的最大深度
-mindepth 1 #指定查找的最小深度,即只列出1层以上的文件列表
根据文件类型搜索
-type d #只列出文件夹 -type f #只列出普通文件
此外还可以根据时间和文件大小,还可以使用-delete删除找到的文件。
-exec 可以对查出的每一个文件分别进行处理,如将文件所有者root改为hadoop:
[[email protected] temp]$ sudo find . -type f -user root -exec chown hadoop {} \;
xargs
作用:将标准输入转换成命令行参数或者将单行或多行文本转换成命令行参数
[[email protected] ~]$ cat A | xargs #将A文件多行数据转换成单行输入,即将换行符替换为空格 [[email protected] ~]$ cat A | xargs -n 3#将A文件多行数据重新分割并按3个进行分组 [[email protected] ~]$ cat A | xargs -d i #指定分隔符为 i
小提示:xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 file 1.log 被解释成了两个记录 file 和 1.log, 不幸的是 rm 找不到这两个文件.为了解决此类问题, 让 find命令在打印出一个文件名之后接着输出一个 NULL 字符 (‘‘) 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符. 这就是 find 的 -print0 和 xargs 的 -0 的来历吧.
sort和uniq
[[email protected] ~]$sort A #对A文件进行升序排序 [[email protected] ~]$sort -r A #对A文件进行逆序排序 [[email protected] ~]$sort -n A #对A文件按数字进行排序 [[email protected] ~]$sort -k 2 A #根据第二列进行排序
uniq总是和sort一起使用,可以消除重复的行