shell编程之基础篇

第一章 什么是shell

shell的定义

在计算机科学中,Shell就是一个命令解释器。
shell是位于操作系统和应用程序之间,是他们二者最主要的接口,shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。
shell位置图
在这里插入图片描述
总结:
一句话,shell就是在操作系统和应用程序之间的一个命令翻译工具。

shell的分类

命令行式shell

  • windows系统:
    cmd.exe 命令提示字符
  • linux系统:
    sh / csh / ksh / bash / …
    我们常说的shell是命令行式的shell,在工作中常用的是linux系统下的bash

查看系统shell信息

查看当前系统的shell类型: echo $SHELL
查看当前系统环境支持的shell:[root@linux-node1 ~]# cat /etc/shells

/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

shell 脚本

shell使用方式

  • 手工方式:
    手工敲击键盘,在shell的命令行输入命令,按Enter后,执行通过键盘输入的命令,然后shell返回并显示命令执行的结果.
    重点:逐行输入命令、逐行进行确认执行

  • 脚本方式:
    就是说我们把手工执行的命令a,写到一个脚本文件b中,然后通过执行脚本b,达到执行命令a的效果.

shell脚本示例

现在我们来使用脚本的方式来执行以下

#!/bin/bash
### 这是临时shell脚本
echo 'nihao'
echo 'itcast'

脚本执行语句:
[root@linux ~]# /bin/bash itcast.sh ,执行方式为/bin/bash 文件名(shell脚本为.sh结尾)

执行结果为:

nihao
itcast

第 2 章 SHELL 基础知识

shell脚本

创建脚本
  • 脚本创建工具:
    创建脚本的常见编辑器是 vi/vim.

  • 脚本命名
    shell脚本的命名简单来说就是要有意义,方便我们通过脚本名,来知道这个文件是干什么用的。

  • 脚本内容:
    各种可以执行的命令

  • 注释内容:
    单行注释:
    除了首行的#不是注释外,其他所有行内容,只要首个字符是#,那么就表示该行是注释
    例:

#!/bin/bash
echo '1'
# echo '2'			# 这一行就表示注释
echo '3'
  • 多行注释:
    多行注释有两种方法::<<! … ! 和:<<字符 ... 字符
#!/bin/bash
echo '1'
:<<! echo '2'
echo '3'
echo '4'
!
echo '5'

脚本执行

shell执行的方式

Shell脚本的执行通常可以采用以下几种方式
bash pyhello.sh
/bin/bash pyhello.sh(强烈推荐使用)

  • 添加权限
    chmod +x pyhello

脚本开发规范

  • 1、脚本命名要有意义,文件后缀是.sh
  • 2、脚本文件首行是而且必须是脚本解释器
    #!/bin/bash
  • 3、脚本文件解释器后面要有脚本的基本信息等内容
    尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰
    常见的注释信息:脚本名称、脚本功能描述、脚本版本、脚本作者、联系方式等
  • 4、脚本文件常见执行方式:bash 脚本名
  • 5、脚本内容执行:从上到下,依次执行
  • 6、代码书写优秀习惯;
    1)成对内容的一次性写出来,防止遗漏。
    如:()、{}、[]、’’、``、""
    2)[]中括号两端要有空格,书写时即可留出空格[ ],然后再退格书写内容。
    3)流程控制语句一次性书写完,再添加内容
  • 7、通过缩进让代码易读;(即该有空格的地方就要有空格)

变量

变量的定义和分类

  • 本地变量
  • 全局变量
  • shell内置变量

变量是什么?

变量包括两部分:
	变量名		不变的
	变量值		变化的

我们一般所说的变量指的是:变量名

本地变量

  • 本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。
    本地变量包含两种:普通变量命令变量

  • 普通变量:
    普通变量的定义方式有如下三种,接下来我们就分别说一下这三种方式:

  • 方式一:
    变量名=变量值
    重点:
    变量值必须是一个整体,中间没有特殊字符

  • 方式二:
    变量名='变量值'
    重点:
    我看到的内容,我就输出什么内容

  • 方式三:
    变量名="变量值"
    重点:
    如果变量值含有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重新赋值给变量B

命令变量

命令变量有两种定义方式:

  • 定义方式一:
    变量名=命令
    注意:
    ` 是反引号

  • 定义方式二:
    变量名=$(命令)

全局变量

全局变量就是:在当前系统的所有环境下都能生效的变量。

  • 查看全局变量命令
    可以通过命令查看环境变量
    env 只显示全局变量

定义全局变量

  • 方法一:
    变量=值
    export 变量
  • 方法二:(最常用)
    export 变量=值

变量查看和取消

查看变量:

  • 方式一:
    $变量名

  • 方式二:

      ${变量名}
      场景:
      	echo " dsa  dsafsa  dsafsa ${变量名} f "
    
  • 方式四:使用频率较高

      "${变量名}"
      场景:
      	标准使用方式
    

取消变量

unset 变量名


shell内置变量

  • 和脚本文件有关
符号意义
$0获取当前执行的shell脚本文件名,包括脚本路径
$n获取当前执行的shell脚本的第n个参数值,n=1…9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来${10}
$#获取当前shell命令行中参数的总个数
$?获取执行上一个指令的返回值(0为成功,非0为失败)

重点内置变量演示效果:
$0 获取脚本的名称
示例:

#!/bin/bash
# 获取脚本的名称
echo "我脚本的名称是: file.sh"
echo "我脚本的名称是:$0"

$# 			获取当前脚本传入参数的数量
$n 			获取当前脚本传入的第n个位置的参数

示例:

#!/bin/bash
# 获取当前脚本传入的参数数量
echo "当前脚本传入的参数数量是: $#"

# 获取指定位置的参数
echo "第一个位置的参数是: $1"
echo "第二个位置的参数是: $2"
echo "第三个位置的参数是: $3"
echo "第四个位置的参数是: $4"
			
$?			获取文件执行或者命令执行的返回状态值

示例:

# bash nihao
bash: nihao: No such file or directory
# echo $?
127

# ls
file1.sh  num.sh  test.sh  weizhi.sh
# echo $?
0
---------------
字符串精确截取
格式:${变量名:起始位置:截取长度}

示例:

名称含义
${file:0:5}从第1个字符开始,截取5个字符
${file::5}从第1个字符开始,截取5个字符
${file:5:5}从第6个字符开始,截取5个字符
${file:5}从第6个字符开始,截取后面所有的字符
${file:0-5}从倒数第5个字符开始,截取后面所有的字符
${file:0-6:3}从倒数第6个字符开始,截取之后的3个字符

默认值相关

  • 场景一:
    变量a如果有内容,那么就输出a的变量值
    变量a如果没有内容,那么就输出默认的内容

    格式:
    ${变量名:-默认值}

    套餐示例:
    如果我输入的参数为空,那么输出内容是 “您选择的套餐是: 套餐 1”
    如果我输入的参数为n,那么输出内容是 “您选择的套餐是: 套餐 n”

#!/bin/bash
# 套餐选择演示
a="$1"
echo "您选择的套餐是: 套餐 ${a:-1}"
  • 场景二:
    无论变量a是否有内容,都输出默认值
    格式:
    ${变量名+默认值}
    场景示例:
    不管我说国家法定结婚年龄是 多少岁,都输出 国家法定结婚年龄(男性)是 22 岁
#!/bin/bash
# 默认值演示示例二
a="$1"
echo "国家法定结婚年龄(男性)是 ${a+22} 岁"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值