shell脚本编程入门篇(一)

一.shell概述

shell是一个命令行解析器,它接收应用程序/用户命令,然后调用操作系统内核。同时shell也是一个功能强大的编程语言,易编写,易调试,灵活性强。
shell脚本编程入门篇(一)_第1张图片

二.shell 解析器

1.linux提供的shell解析器有

[root@node-4 ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

2.bash和sh的关系

# sh 是bash的软连接
[root@node-4 bin]# ll | grep bash
-rwxr-xr-x  1 root root 941880 5月  11 2016 bash
lrwxrwxrwx. 1 root root      4 3月   9 09:20 sh -> bash

3.centos默认的解析器是bash

[root@node-4 bin]# echo $SHELL
/bin/bash

三.shell脚本入门

1.脚本格式

# 以如下开头,实际上也是指定解析器的过程
#!/bin/bash

2.编写第一个脚本:输出hello world

vi helloworld.sh
# 输入以下内容

#!/bin/bash
echo "helloworld"

3.脚本的执行

**第一种:**采用bash或sh+路径+文件名的方式(不需要赋予脚本+x权限)

sh+路径

sh helloworld.sh

bash+路径

bash helloworld.sh

**第二种:**输出路径+文件名(需要赋予脚本执行权限+x)

# 赋予执行权限
chmod u+x helloworld.sh
# 执行
./helloworld.sh

注意:

第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。

第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

四.shell中的变量

1.常用系统变量

$HOME
$PWD
$SHELL
$USER

# 查看当前shell中的所有变量
set

2.自定义变量

1.基本语法

定义变量:变量=值

撤销变量:unset 变量

声明静态变量:readonly 变量,注意静态不能unset,(关闭当前会话,静态变量消失)

2.变量定义规则

变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写

等号两侧不能由空格

在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

变量的值如果有空格,需要使用双引号或单引号括起来

3.案例实操

1.定义变量

2.给定义的变量重新赋值

3.撤销变量

4.声明静态变量,不能unset

5.在bash中默认的字符类型都是字符串类型,无法直接进行数值运算

6.变量的值如果有空格,需要使用双引号或者单引号括起来

7.可以将变量提升为全局变量,可供其他shell程序使用

3.特殊变量$n

1.基本语法

$n(功能描述:n为数字,$0代表脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 内 的 参 数 , 十 以 上 的 参 数 需 要 大 括 号 括 起 来 , 如 9代表第一到第九个参数,十以内的参数,十以上的参数需要大括号括起来,如 9{10})

2.输出该脚本的名称,将参数1,参数2的值输出

4.特殊变量$#

1.基本语法

$# (功能描述:获取所有输入参数个数,常用于循环)

2.获取输入参数的个数

5.特殊变量 ∗ , *, ,@

1.基本语法

∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, (*把所有的参数看成一个整体)

@ ( 功 能 描 述 : 这 个 标 量 代 表 命 令 行 中 所 有 的 参 数 , @ (功能描述:这个标量代表命令行中所有的参数, @(@把每个参数区分对待)

2.打印输入的参数

6.特殊变量 $?

1.基本语法

$? (功能描述:最后一次执行命令的返回状态,如果这个返回值为0,代表上一条命令执行成功,返回非0,具体是那个数,由命令自己决定,则证明上一条命令没有正确执行)

2.判断helloworld.sh 脚本是否正确执行

五.运算符

1.基本语法

$((运算式)) 或 $[运算式]

# expr 运算符间要有空格
expr +,-,\*,/,%     加,减,乘,除,取余

2.计算(2+3)x4

expr `expr 2 + 3` \* 4

六.条件判断

1.基本语法

# condition前后需有空格
# 条件非空即为true,如 [ string ] 为true, []返回false
[ condition ]

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)

七.流程控制(重点)

1.if判断

1.基本语法

# [ 条件判断式 ],中括号和条件判断式中间必须有空格
# if后面要有空格
if [ 条件判断式 ];then
	程序
fi

或者

if [ 条件判断式 ]
	then
		程序
fi

2.案例实操

输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。

#!/bin/bash
if [ $1 -eq '1' ];then
	echo 'banzhang zhen shuai'
elif [ $1 -eq '2' ];then
	echo 'cls zhen mei'
fi

2.case语句

1.基本语法

case $变量名 in
	"值1")
		如果变量的值为1,则执行程序1
		;;
	"值2")
		如果变量的值为2,则执行程序2
		;;
	*)
		如果变量的值不是以上,则执行此程序
		;;
esac

2.注意

1.case行尾必须为单词in,每个模式匹配必须以括号 “)” 结束

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

3.最后的 *) 表示默认模式,详单与java中的default

实操:

输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。

#!/bin/bash
case $1 in
	"1")
		echo "banzhang"
		;;
	"2")
		echo "cls"
		;;
	*)
		echo "renyao"
		;;
esac

3.for循环

你可能感兴趣的:(Shell,shell)