Shell脚本基本命令

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


显示某些进程的环境变量

[hadoop@Hadoop ~]$ pgrep bash
3182
[hadoop@Hadoop ~]$ 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

[hadoop@Hadoop ~]$ declare -A map_array
[hadoop@Hadoop ~]$ map_array[index1]=val1
[hadoop@Hadoop ~]$ map_array[index2]=val2
[hadoop@Hadoop ~]$ echo ${map_array[*]}
val1 val2
[hadoop@Hadoop ~]$ echo ${!map_array[*]}
index1 index2

cat

作用:读取、显示、拼接文件内容。
将AB两个文件内容一块输出 [hadoop@Hadoop ~]$ cat A B
将输入文本与A一块显示 [hadoop@Hadoop ~]$ echo "Hello" | cat - A
压缩空白行 cat -s  A
将制表符显示为^|  cat -T A
显示文本行号 cat -n A


find

作用:查找路径及子路径下所有的文件和文件夹
查找script目录下所有的文件
[hadoop@Hadoop ~]$ find script/
script/
script/timing.log
script/output.session


根据文件名或正则表达式匹配搜索
[hadoop@Hadoop ~]$ find script/ -name "t*" #必须用引号括起来
[hadoop@Hadoop ~]$ find script/ -iname "t*" #忽略文件名的大小写


可以用OR连接多个条件
[hadoop@Hadoop ~]$ 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:
 [hadoop@Hadoop temp]$ sudo find . -type f -user root -exec chown hadoop {} \;

xargs

作用:将标准输入转换成命令行参数或者将单行或多行文本转换成命令行参数
[hadoop@Hadoop ~]$ cat A | xargs #将A文件多行数据转换成单行输入,即将换行符替换为空格
[hadoop@Hadoop ~]$ cat A | xargs -n 3#将A文件多行数据重新分割并按3个进行分组
[hadoop@Hadoop ~]$ 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

[hadoop@Hadoop ~]$sort A #对A文件进行升序排序
[hadoop@Hadoop ~]$sort -r A #对A文件进行逆序排序
[hadoop@Hadoop ~]$sort -n A #对A文件按数字进行排序
[hadoop@Hadoop ~]$sort -k 2 A #根据第二列进行排序


uniq总是和sort一起使用,可以消除重复的行

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。