运行shell命令,需要在前面加echo

shell中变量:
$HOME :当前用户主目录
$PWD :当前运行命令的目录
$USER: 当前用户
set: 显示当前shell所有变量
export+ 变量名 :可把变量提升为全局环境变量

定义变量:
STR=“hello world”
A=9
A=ls -la反引号,运行里面的命令,并把结果返回给变量A, 也可以写成A=$(ls -la)

shell中特殊变量:
$? 表示上一个命令退出的状态
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
∗ 和 *和 @ 都表示参数列表

运算符:
格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格
计算(2 +3 )×4 的值
echo expr \expr 2 + 3` * 4` 或 $(((2+3)*4))

for循环:
for N in 1 2 3
do
echo $N
done

或者

for ((i = 0; i <= 5; i++))
do
echo “welcome $i times”
done

while循环:
i=1
while ((i<=3))
do
echo $i
let i++
done

case语句:
case $1 in
start)
echo “starting”
;;
stop)
echo “stoping”
;;
*)
echo "Usage: {start|stop} “
esac

if判断:
if condition
then
statements
[elif condition
then statements. …]
[else
statements ]
fi

[ condition ] (注意condition前后要有空格)

[ condition ] && echo OK || echo notok 条件满足,执行后面的语句

常用判断条件:

= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

自定义函数:
function funname ()
{
action;
[return int;]
}

命令行文本处理:

1、cut命令可以从一个文本文件或者文本流中提取文本列

选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;

例如:
将 PATH 变量取出,我要找出第五个路径。
#echo $PATH | cut -d ‘:’ -f 5
/usr/local/bin

2、sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。

选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思

例如:

/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?
[root@www ~]# cat /etc/passwd | sort -t ‘:’ -k 3
root❌0:0:root:/root:/bin/bash
uucp❌10:14:uucp:/var/spool/uucp:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
games❌12????games:/usr/games:/sbin/nologin

3、wc 统计文件里面有多少单词,多少行,多少字符。

例如:
#wc -m /etc/passwd #统计文件的字符数
1719

4、awk命令
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

例如:
如果只是显示/etc/passwd的账户
#cat /etc/passwd |awk -F ‘:’ ‘{print $1}’
root
daemon
bin
sys

5、sed命令
sed 是一种在线编辑器,它一次处理一行内容。
替换:s命令

例如:
$ sed ‘s/test/mytest/g’ example
-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。

更多java、大数据学习面试资料,请扫码关注我的公众号:
shell编程语法_shell