一、Shell概述

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

Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。

二、Shell脚本入门

1.脚本格式

脚本以#!/bin/bash开头

2.第一个Shell脚本

(1)需求

创建一个Shell脚本,输出helloworld

(2)实操

touch helloworld.sh
vim helloworld.sh

在helloworld.sh中输入如下内容:

#!/bin/bash
echo 'helloworld'

(3)执行方式

第一种:采用bash或sh+脚本的

sh+脚本的相对路径(不用赋予脚本+x权限)

sh helloworld.sh

sh+脚本的绝对路径

sh /home/depo/shell/helloworld.sh

bash+脚本的相对路径

bash hellworld.sh

bash+脚本的绝对路径

bash /home/depo/shell/helloworld.sh

第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)

首先赋予helloworld.sh脚本的+x权限

chmod 777 helloworld.sh

执行脚本

相对路径:
./helloworld.sh
绝对路径:
/home/depo/shell/helloworld.sh

注意:第一种执行方式,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

3.第二个Shell脚本:多命令处理

#!/bin/bash
​
touch test.txt
echo "i love java" >> test.txt

三、Shell中的变量

1.系统变量

(1)常用系统变量

$HOME、$PWD、$SHELL、$USER等

(2)实操

查看系统变量的值

[depo@dev shell]$ echo $HOME
/home/depo

2.自定义变量

(1)基本变量

定义变量: 变量=值

撤销变量: unset 变量

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

(2)变量定义规则

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

  • 等号两侧不能由空格

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

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

(3)实操

1.定义变量A

A=5
echo $A

2.给变量A重新赋值

A=8
echo $A

3.撤销变量A

unset A
echo $A

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

[depo@dev shell]$ readonly B=2
[depo@dev shell]$ echo $B
2
[depo@dev shell]$ unset B
-bash: unset: B: 无法反设定: 只读 variable
[depo@dev shell]$ 

5.在bash中,变量默认是字符串类型

[depo@dev shell]$ C=1+2
[depo@dev shell]$ echo C
C
[depo@dev shell]$ 

6.可把变量提升为全局环境变量,供其他Shell程序使用

将变量C提升为全局变量:

export C

修改helloworld.sh:

#!/bin/bash
​
​
echo "helloworld"
echo $C

运行:

[depo@dev shell]$ ./helloworld.sh
helloworld
1+2

3.特殊变量:$n

(1)基本语法

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

(2)实操

touch parameter.sh
vim parameter.sh
#!/bin/bash
​
echo "$0 $1 $2 $3"  
      

执行该脚本

[depo@dev shell]$ sh parameter.sh abc yfy nihao
parameter.sh abc yfy nihao

4.特殊变量:$

(1)基本语法

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

5.特殊变量:$*、$@

(1)基本语法

$*:这个变量代表命令行中所有的参数,把所有的参数看成一个整体

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

(2)实操

打印输入的所有参数

vim parameter.sh
​
#!/bin/bash
​
echo "$0 $1 $2 $3"
echo $#
echo $*
echo $@

执行:

[depo@dev shell]$ sh parameter.sh abc yfy nihao
parameter.sh abc yfy nihao
3
abc yfy nihao
abc yfy nihao

5.特殊变量:$?

(1)基本语法

$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行

(2)实操

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

[depo@dev shell]$ ./helloworld.sh
helloworld
1+2
[depo@dev shell]$ echo $?
0
[depo@dev shell]$ 

四、运算符

1.基本语法

(1)$((运算符))或$[运算符]

(2)expr +,-,*,/,%. 加减乘除取余

2.实操

(1)计算3+2的值

[depo@dev shell]$ expr 2 + 3
5

(2)计算(2+3)x4的值

expr一步完成计算

expr `expr 2 + 3` \* 4

采用$[运算式]方式

S=$[ (2+4)*4 ]

Linux之Shell脚本入门相关推荐

  1. Linux:shell脚本入门笔记

    目录 Shell简介: 第一个shell脚本: Shell的脚本变量: ​ 条件测试: 控制语句与函数: 代码示例: Shell简介: Shell本身是一个用C语言编写的程序,它是用户使用Linux的 ...

  2. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  3. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  4. Linux Shell脚本入门教程系列之(十五) Shell函数简介

    本文是Linux Shell脚本系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之后,函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰 ...

  5. Linux Shell脚本入门教程系列之(十四) Shell Select教程

    本文是Linux Shell脚本系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句 ...

  6. Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程

    本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 上一篇之 后,分支语句非常实用,基本上高级语言都支持分支语句(pytho ...

  7. Linux Shell脚本入门教程系列之(十二)Shell until循环

    本文是Linux Shell脚本系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环 ...

  8. Linux Shell脚本入门教程系列之(十一)Shell while循环

    本文是Linux Shell脚本系列教程的第(十一)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 在上一篇Linux Shell系列教程之(十)Shell for循环中, ...

  9. Linux Shell脚本入门教程系列之(十)Shell for循环

    本文是Linux Shell脚本系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,继上一篇之后,今天 ...

最新文章

  1. R语言中的esttab命令_R语言︱基本函数、统计量、常用操作函数
  2. HDU 1556 Color the ball (数状数组)
  3. mysql的sum函数 如何设置默认值_mysql使用sum()出现null的问题,各种总结
  4. Material Design实现的美观的登录界面
  5. [20171120]11G关闭直接路径读.txt
  6. java LinkedHashMap源码解析
  7. SpringBoot 的错误处理机制
  8. ACDSee Photo Studio 8 for Mac v8.0.2283 数字图象编辑处理软件
  9. python txt转为csv
  10. 【案例】全国知名网上书城——基于企业中台构建智慧悦读体验
  11. Acer Linux改win7,宏基台式机win10如何改win7系统_宏基台式机预装win10怎么换win7
  12. 对投影值进行线性插值之后再进行滤波反投影的Python实现
  13. 6小时精通springcloud第09讲:微服务安全认证
  14. Django + ajax
  15. 第三篇 SG90舵机和HC-SR04测距
  16. BJFU实验一链表部分题解整合
  17. SSA麻雀算法优化BP神经网络(SSA-BPNN)回归预测MATLAB代码(有优化前后的对比
  18. cyq.data mysql_CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
  19. 我的DDK学习经验(转载)
  20. 【Java学习之代码学习】 Prog26_求第几天的问题

热门文章

  1. java结丹期(14)----javaweb(cookiesession)
  2. 【Flask】Flask-RESTful 风格编程
  3. 思考:通过MMU/TLB/Cache对安全内存攻击的可能性
  4. MySql 查询同一字段多个结果合并到一行显示 GROUP_CONCAT
  5. MySQL安装教程,包含所有平台(图解)
  6. 从指定URL中提取文件名
  7. 138. 兔子与兔子【字符串哈希】
  8. Acwing第 40 场周赛【完结】
  9. Acwing第 29 场周赛【完结】
  10. 【C / C++】关于数组默认初值问题