【shell基本语法 01】

一、概述:

 操作系统中基础的是硬件(cpu,内存),外面一层是Linux的内核,在外面一层是应用程序,那么shell在中间扮演的角色就是关联内核和应用程序

shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。

二、Shell解释器

1、Linux提供的解释器

[root@localhost ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

有6个常用的一般是前面两个,Shell脚本的特点一般都是已.sh结尾的

2、bash和sh的关系

[root@localhost bin]# ll |grep bash
-rwxr-xr-x. 1 root root      960472 8月   3 2017 bash
lrwxrwxrwx. 1 root root           4 1月  25 13:50 sh -> bash

从sh -> bash可以看出来,两者是软连接,sh最终调用的其实也是bash

3、centos默认的解释器是bash

[root@localhost bin]# echo $SHELL
/bin/bash

三、shell脚本的格式

1、具体格式:

脚本以#!/bin/bash开头(指定解析器:bash,当然也可以指定sh  #!/bin/sh

实例1:输出hellword

1)一般情况下我们可以在终端输入:echo hellword -->执行结果:helloword

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出

2)用shell的sh、bash或者./执行

[root@localhost data]# touch helloword.sh
[root@localhost data]# vi helloword.sh 
文件内容:
#!/bin/bash
echo "hello girl"

#第一种相对路径下用sh 、bash执行
[root@localhost data]# sh helloword.sh   
hello girl
[root@localhost data]# bash helloword.sh 
hello girl

#绝对路径下用sh 、bash执行
[root@localhost data]# bash /opt/data/helloword.sh 
hello girl
[root@localhost data]# sh /opt/data/helloword.sh 
hello girl

#第二种采用输入脚本的相对路径/绝对路径执行 -->结果权限不够
[root@localhost data]# ./helloword.sh
-bash: ./helloword.sh: 权限不够
[root@localhost data]# /opt/data/helloword.sh
-bash: /opt/data/helloword.sh: 权限不够

#赋予执行权限
[root@localhost data]# chmod +x helloword.sh 
[root@localhost data]# ./helloword.sh 
hello girl
[root@localhost data]# /opt/data/helloword.sh 
hello girl

第一种和第二种的区别在于:第一种的本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;第二种本质是脚本需要自己执行,需要执行权限

实例2:多命令行处理

需求:通过shell脚本实现:在/opt/data目录下创建一个test.txt文件,并在文件中写入I love zly

1)实际操作

创建一个batch.sh文件并写入shell脚本
[root@localhost data]# touch batch.sh
[root@localhost data]# vi batch.sh
 #!/bin/bash

cd /opt/data
touch test.txt
echo "I love zly" >> test.txt

#执行batch.sh文件并查看是否生成test.txt并且文本内容是否是“I love zly”
[root@localhost data]# bash batch.sh 
[root@localhost data]# ll
总用量 12
-rw-r--r--. 1 root root 71 1月  28 16:26 batch.sh
-rwxr-xr-x. 1 root root 31 1月  28 16:04 helloword.sh
-rw-r--r--. 1 root root 11 1月  28 16:26 test.txt
[root@localhost data]# cat test.txt 
I love zly

注意:echo "I love zly" >> test.txt   中的>>是重定向的意思,实际的作用是把“I love zly”添加到test.txt文件中

实例2:加入到环境变量后执行

以wufq用户为例,比如执行/home/wufq/data下的所有.sh文件

1、先查看wufq用户的HOME路径

 

 2、修改当前用户的环境变量

在当前用户的根目录下,执行

vi .bash_profile

把data路径添加到path内

3、保存后,source  .bash_profile

4、增加data目录下所有.sh文件可执行的权限,然后就可以直接用文件名执行了

 三、shell中的变量

1、常用的系统变量

$HOME$PWD$SHELL$USER

显示当前Shell中所有变量:set

[root@localhost data]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()

2、自定义变量

1)基本语法:

--->  定义变量:变量=值  (规范:变量和值之间不能有空格)

[root@localhost data]# A =1
-bash: A: 未找到命令
[root@localhost data]# A = 1
-bash: A: 未找到命令
[root@localhost data]# A=1
[root@localhost data]# echo $A
1 

---> 撤销变量:unset 变量

[root@localhost data]# unset A
[root@localhost data]# echo $A

[root@localhost data]# 

 ---> 声明静态变量readonly变量,注意:不能unset

[root@localhost data]# readonly C=5
[root@localhost data]# echo $C
5
[root@localhost data]# unset
[root@localhost data]# echo $C
5
[root@localhost data]# 

 执行unset无效

2)变量定义规则

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

--> 等号两侧不能为空格

--> 在bash中,变量的默认类型都是字符串类型,不能进行数值的运算

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

[root@localhost data]# TEST_1="test ing"+1
[root@localhost data]# echo $TEST_1
test ing+1

 --> 可把变量设置成全局变量,其他的Shell程序可以使用  ==>通过export 变量名来设置

[root@localhost data]# vi helloword.sh 
#!/bin/bash

echo "hello girl"
echo $TEST_1   --->增加这行内容
[root@localhost data]# export TEST_1    -->把TEST_1变量设置成全局变量
[root@localhost data]# sh helloword.sh 
hello girl
test ing+1    -->显示出来了说明:全局变量已经设置成功

 3、特殊变量:

1)$n:n为数字,$0代表脚本名称,$1~$9代表的第一到第九个参数,十以上的参数需要用大括号包含:如:${10}

举例:

 2)$#:获取所有输入参数个数,常用于循环

 3)$*:代表命令行中所有的参数,把所有的参数看做一个整体

  $@:也是代表命令行中所有的参数,不过$@是把每个参数区别对待

 

 4)$?:最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令的正常执行,如果这个变量的值为非0(具体是哪一个值,由命令本身确定),则证明上一个命令没有正常执行

四、运算符

1、基本语法:$((运算式))   或  $[运算式]

2、expr +   -   *   /  %    ==> 加 减 乘 除  取余    注意:expr 运算符间要有空格

举例1:

 举例2:

expr一步完成运算方式

 

 采用$[运算符的方式] 计算

[root@localhost data]# Y=$[ (2+3) *4]
[root@localhost data]# echo $Y
20

五、条件判断

1基本语法

[ condition ]注意condition前后要有空格  condition是判断内容

注意:条件非空即为true[ atguigu ]返回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

原文地址:https://www.cnblogs.com/frankruby/p/14340580.html