[Shell]尚硅谷大数据技术之Shell--笔记

Posted llhgj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Shell]尚硅谷大数据技术之Shell--笔记相关的知识,希望对你有一定的参考价值。

条件判断

1、基本语法

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

注意:条件非空即为true,[atgusaga]返回true,[]返回false

2、常用判断条件

(1)两个整数之间比较

= 字符串比较

-lt 小于(less than)                                       -le 小于等于(less equal) 

-eq 等于(equal)                                          -gt 大于(greater than)

-ge 大于等于(greater equal)                       -ne 不等于(Not equal)

(2)按照文件权限进行判断

-r 有读的权限(read)                                   -w 有写的权限(write)              -x 有执行的权限(execute)

(3)按照文件类型进行判断

-f 文件存在并且是一个常规文件(file)

-e 文件存在(existence)                      -d 文件存在并是一个目录(directory)

3、案例实操

(1)23是否大于等于22

$ [ 23 -ge 22 ]
$ echo $?
0

(2)helloworld.sh是否具有写权限

$ ls -lh
-rwxrwxrwx  1 yuanjiao rsgeno   40 Dec 10 18:05 helloworld.sh*
$ [ -w helloworld.sh ]
$ echo $?
0

(3)/home/atiguigu/cls.txt 目录中文件是否存在

$ [ -e /home/atiguigu/cls.txt ]
$ echo $?
1

(4)多条件判断(&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败后,才执行下一条命令)

$ [ -e /home/atiguigu/cls.txt ] && echo ok ||echo notok
notok

流程控制

1、if判断

(1)基本语法

if [ 条件判断式 ];then

程序

fi

或者

if [ 条件判断式 ]

        then

                程序

fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

(2)案例实操

(1)输入一个数字,如果是1,则输出bangzhang zhen shuai,如果是 2,则输出bangzhang zhen mei,如果是其他,什么也不输出

$ touch just.sh
$ vi just.sh

#!/bin/bash
if [ $1 -eq 1 ];then
echo "bangzhang zhen shui"
elif [ $1 -eq 2 ];then
echo "bangzhang zhen mei"
fi

$ bash just.sh 1
bangzhang zhen shui

2、case语句

(1)基本语法

case $变量名 in

"值 1")

如果变量值等于值1,则执行程序1

;;

"值 2”)

如果变量值等于值2,则执行程序2

;;

...省略其他分支...

*)

如果变量的值不是以上的值,则执行此程序

;;

esca

注意事项:

1)case行尾必须为单词“in",每一个匹配必须以右括号")"结束。

2)双分号";;"表示命令列结束,相当于java中的break

3)最后的”*)“表示默认模式,相当于java中的default

(2)案例实操

1)输入一个数字,如果是1,则输出bangzhang,如果是2,则输出laoshi,如果是其他,输出tongxue

$touch case.sh
$vi case.sh 

#!/bin/bash
case $1 in
"1")
echo "bangzhang"
;;
"2")
echo "laoshi"
;;
*)
echo "tongxue"
;;
esac


$bash case.sh
tongxue
$bash case.sh 2
laoshi

3、For循环

(1)基本语法1

for (( 初始值;循环控制条件;变量变化 ))

do

程序

done

(2)案例实操

1)从1加到100

$ touch for1.sh
$ vi for1.sh


#!/bin/bash
s=0
for ((i=0;i<=100;i++))
do
s=$[$s + $i]
done
echo $s


$ bash for1.sh 
5050

(3)基本语法2

for 变量 in 值1 值2 值3...

do 

程序

done

(4)案例实操2

打印所有输入参数

$ touch for2.sh

#!/bin/bash
for i in $*
do
echo $i
done


$ bash for2.sh bangzhang laoshi
bangzhang
laoshi

$*和¥$@用法区别

#!/bin/bash
echo "1"
for i in $*
do
echo "this is $i"
done

echo "2"
for j in $@
do
echo "this is $j"
done



$ bash for2.sh bangzhang laoshi tongxue
1
this is bangzhang
this is laoshi
this is tongxue
2
this is bangzhang
this is laoshi
this is tongxue
#!/bin/bash
echo "1"
for i in "$*"
do
echo "this is $i"
done

echo "2"
for j in "$@"
do
echo "this is $j"
done

$ bash for2.sh
1
this is bangzhang laoshi tongxue
2
this is bangzhang
this is laoshi
this is tongxue

4、While 循环

1、基本语法

while [ 条件判断式 ]

do 

程序

done

2、案例实操

(1)从1加到100

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s

read 读取控制台输入

1、基本语法

read(选项)(参数)

选项:

        -p:指定读取值的提示符;

        -t:指定读取值时等待的时间(秒)

参数

        变量:指定读取值的变量名

2、案例实操

(1)提示7秒内,读取控制台输入的名称

$ touch read.sh
$ vi read.sh

read -t 7 -p "input your name:" NAME
echo $NAME


$ bash read.sh
input your name:tiantian
tiantian

函数

1、系统函数

(1)basename基本语法

basename [string/pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来

选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

(2)案例实操

$ basename /home/username/shell/helloworld.sh
 helloworld.sh
$ basename /home/username/shell/helloworld.sh .sh
helloworld

(3)dirname基本语法

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的部分(目录的部分))

(4)案例实操

$ dirname /home/username/shell/helloworld.sh
/home/username/shell

2、自定义函数

(1)基本语法

[ function ] funname[()]


        Action;

        [return int;]

funname

(2)经验技巧

1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其他语言一样先编译

2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

(3)案例实操

1)计算两个输入参数的和

$ touch fun.sh
$ vi fun.sh

#!/bin/bash
function sum()

        s=0;
        s=$[$1+$2]
        echo $s


read -p "input your parameter1:" P1
read -p "input yout parameter2:" P2

sum $P1 $P2


$ bash fun.sh
input your parameter1:4
input yout parameter2:5
9

以上是关于[Shell]尚硅谷大数据技术之Shell--笔记的主要内容,如果未能解决你的问题,请参考以下文章

尚硅谷大数据技术Hadoop教程-笔记06Hadoop-生产调优手册

尚硅谷大数据Hadoop教程-笔记01入门

Linux之Shell学习笔记

尚硅谷大数据Hadoop教程-笔记02HDFS

尚硅谷大数据技术之MySQL高级百度网盘分享

Node.js(尚硅谷笔记总结)