shell编程

 

1.什么是 Shell

1.Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell

2.Shell也是一门编程语言<解释型的编程语言>,即shell脚本

3.一个系统可以存在多个shell,可以通过cat /etc/shells 命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的

2.Shell 脚本的执行方式  

第一种: 输入脚本的绝对路径或相对路径(赋予执行权限)

例如: 在/ zzy/ 目录下新建一个文件 

touch helloworld.sh

文件内容:

赋予 执行权限 

 chmod +x helloworld.sh 

运行:

 

第二种: bash 或 sh + 脚本

直接用解释器执行 

sh helloworld.sh #相对路径

sh /zzy/helloworld.sh #绝对路径

第三种:在脚本的路径前再加 "."空格

 . /zzy/helloworld.sh #绝对路径
. ./helloworld.sh #相对路径

区别: 第一种和第二种方式会新开一个 bash, 不同 bash 种的变量无法共享

3.Shell 中的变量

Linux Shell 中的变量分为"系统变量"和"用户自定义变量"

系统变量: $HOME, $PWD, $SHELL, $USER 等等

显示当前 shell 中所有的变量 : set 

4.定义变量

1.变量=值(例如: A=abc)

2.等号两侧不能有空格

3.变量名称一般习惯为大写

4.双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意.

例如:

y=bb
x="hello $y" 
echo $x

双引号结果:

 

y=bb
x='hello $y'
echo $x

单引号结果:

 

5.ZZY="hello world"

6.A=10

7.unset A 撤销变量 A

8.readonly B=2 声明静态的变量 B=2 ,不能 unset

9.export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

  注意:

  

source /etc/profile

是把 export 中的环境变量赋值一遍

5.将命令的返回值赋给变量

A=`ls -la`
A=$(ls -la)

6.Shell 中的特殊变量

6.1 $? 表示上一个命令退出的状态,例如:

通常情况下,命令成功为0.

6.2 $$ 表示当前进程编号(用的不多)

6.3 $0 表示当前脚本名称

例:helloworld.sh 内容如下

#!/bin/bash
echo "this is $0"
echo $0

结果:输出脚本名称

6.4 $n 表示 n 位置的输入参数( n代表数字, n >= 1)

例:helloworld.sh 内容:

#!/bin/bash
echo 'this is $n'
echo "第一个参数:="$1
echo "第二个参数:="$2

运行 :

 sh helloworld.sh  hello world

结果:

6.5 $# 表示参数的个数,常用语循环

6.6 $* 和 $@ 都表示参数列表

例:helloworld.sh 内容

#!/bin/bash
echo 'this is $#, $*, $@'
aa="hello"
echo '$#'
echo $#
echo '$*'
echo $*
echo '$@'
echo $@

 for 循环遍历参数

#!/bin/bash
echo 'this is $#, $*, $@'
aa="hello"

echo '$*'
for p in $*
do echo $p
done

echo '$@'
for p in $@
do 
echo $p
done

结果:

6.7 $* 和 $@ 区别

  $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数

  当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数 

7.运算符

  格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格

  例:计算(2 +3 )×4 的值

  1 .分步计算

S=`expr 2 + 3`
expr $S \* 4

  2 .一步完成计算

expr `expr 2 + 3 ` \* 4
echo `expr \`expr 2 + 3\` \* 4`
或
$(((2+3)*4))

8.for 循环

第一种:

for N in 1 2 3
do
echo $N
done
或
for N in 1 2 3; do echo $N; done
或
for N in {1..3}; do echo $N; done

第二种:

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

运行结果:

9.while循环

 第一种:

while true  # 表达式
do
echo "1"
done

第二种:

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

10.case 语句

编辑文件:testcase.sh

  

  常规的break是在每一项后面加;;

  无条件继续是在每一项后面加;&

  有条件继续实在每一项后面加;;&

A="start"
case $A in
start)
        echo "starting"
        ;;
stop)
        echo "stoping"
        ;;
*)
        echo "Usage: {start|stop}"
esac

11.read 命令

作用:提示用户命令

read -p(提示语句)-n(字符个数) -t(等待时间) 

read -p "please input your name: " NAME  #变量名为 NAME

测试:

12.if 语句

语法:

if condition 
then 
    statements 
[elif condition 
    then statements. ..] 
[else 
    statements ] 
fi

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

#!/bin/bash
read -p "please input your name:" NAME
#printf '%s\n' $NAME
if [ $NAME = root ]
        then
                echo "hello ${NAME},  welcome !"
        elif [ $NAME = zzy ]
                then
                        echo "hello ${NAME},  welcome !"
        else
                echo "SB, get out here !"
fi

常用判断条件-比较:

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

0为true,>1为false

非空返回true,可使用$?验证(0为true,>1为false)
[ zzy ]

空返回false
[  ]

常用判断条件-文件

-r 有读的权限
-w 有写的权限
-x 有执行的权限
-f 文件存在并且是一个常规的文件
-s 文件存在且不为空
-d 文件存在并是一个目录
-b文件存在并且是一个块设备
-L 文件存在并且是一个链接

例: 检测 testif.sh 文件是否存在

13.shell 自定义函数

语法:

 [ function ] funname [()]
{
    action;
    [return int;]
}

function start()  / function start / start()

例如:

#!/bin/bash

function fsum()
{
 echo $1,$2;
 return $(($1+$2));

}
fsum 5 7;
total=$?;
echo $total,$?;

输出:

执行命令:sh testsum.sh  
5,7
12,0

注意
1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译,python 也不会预编译

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

14.脚本调试

sh -vx helloWorld.sh
或者在脚本中增加set -x

例如:

#!/bin/bash
set -x
function fsum()
{
 echo $1,$2;
 return $(($1+$2));

}
fsum 5 7;
total=$?;
echo $total,$?;

输出:

[root@dkh101 zzy]# sh testsum.sh     
+ fsum 5 7
+ echo 5,7
5,7
+ return 12
+ total=12
+ echo 12,0
12,0

 15.cut 命令

  详细请参考

16.wc 命令

    wc 命令详解

17.sort 命令

  sort与uniq命令详解 

18 . Shell 自动化部署免密登录 

  详细请参考: Shell 自动化部署免密登录 

19. Shell 自动安装 JDK

  详细请参考: Shell 自动安装 JDK 

20. Shell远程执行命令 

  详细请参考:Linux Shell远程执行命令

21.Shell 判断文件和文件夹是否存在

  详细请参考:Shell 判断文件和文件夹是否存在

 

本部分属于一步一步学习大数据系列之 Linux 的章节,欢迎订阅更多文章

更多内容请参考:一步一步学习大数据系列介绍

 

posted @ 2017-01-09 10:41  农民阿姨  阅读(363)  评论(0编辑  收藏  举报