• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. Hello World
  2. 2. 变量
    1. 2.1. 删除变量
  3. 3. 字符串
    1. 3.1. 字符串操作
  4. 4. 数组

2.0、shell编程(1)-初见

2018-03-05 22:38:32
总字数 1.3k
预计阅读时间 4 分钟

shell俗称为壳 , 是指提供使用者使用界面的软件
也叫做命令解析器
接收用户的命令 , 然后调用相应的应用程序
(接收命令的方式可以是命令行 , 也可以是图形界面)

在linux发展过程中 , 出现过很多的shell

  • sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
    Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。
  • bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
    与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
  • csh(全称 C Shell): 是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
    Tcsh: 是 Linux 提供的 C Shell 的一个扩展版本。
    Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
  • ksh (全称 Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
  • pdksh: 是 Linux 系统提供的 ksh 的扩展。
  • pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。

  • 交互式shell : 等待用户的命令 , 提交后就立即执行该命令
  • 非交互式shell : 不等待用户的输入 , 而是去读取写在文件中的命令代码 , 并且执行 , 这个文件就被称为shell脚本

脚本其实就是短小的、用来让计算机自动化完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。

Hello World

test.sh

1
2
#!/bin/bash
echo "Hello World!"

echo就是对传入的参数直接进行输出的程序
这个脚本的作用就是执行该命令
#!是一个约定的标记 , 它告诉系统这个脚本要用什么解释器来执行

之后需要给这个文件加上可执行权限
chmod +x test.sh
然后就可以执行该脚本了
./test.sh

当然如果这样执行 , 是根据脚本内容中指定的解释器运行
如果没有指定 , 则使用系统默认的
我们也可以在运行时指定使用某个解释器
比如sh test.sh

变量

命名规则是可以包含 字母 数字 下划线 , 且以字母或者数字开头
使用变量则是在前面加$或者用${}
( 当然如果在字符串内部使用 , 为了防止歧义, 必须用${} )

1
2
3
4
5
6
7
name="sookie"
echo $name
echo "my name is ${name}123"
# 大括号是为了帮助解释器识别变量名称的边界

#将该变量设为只读, 之后若再赋值就会报错
readonly name

注意 : 等号的两端不能加空格

删除变量

使用unset 变量名称可以删除对应的变量

按照上面方式定义的变量实际上是这个shell脚本当中的局部变量
在操作系统当中可以设置环境变量 , 所有的shell脚本当中都可以直接使用

字符串

字符串的边界可以是单引号也可以是双引号 也可以无引号 , 但是实际应用当中有一些区别

  • 单引号当中的内容都会原样输出 , 不可以使用转义字符 , 不可以使用字符串模板
  • 双引号当中的内容可以使用转义字符 , 也可以使用字符串模板
  • 无引号不可以使用转义字符 , 但是可以使用字符串模板
    1
    2
    3
    4
    5
    6
    7
    name="sookie"
    echo 'my name is ${name}1'
    # output: my name is ${name}1
    echo "my name is ${name}1"
    # output: my name is sookie1
    echo my name is ${name}1
    # output: my name is sookie1

    字符串操作

    shell当中字符串的拼接不需要用加号
    直接写在一起即可
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    name="sookie"
    echo 'my name is '${name}

    #获取字符串长度
    echo ${#name}

    #截取子串
    echo ${name:1:3} #输出 ook

    #将字符串内容当做命令执行
    echo `ls /usr/local`

数组

同大多数解释型语言一样 , 对于数组并没有严格的越界限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#数组定义, 元素之间用空白分割
arr=(1 "aa" 2.6)

#超出当前数组边界的下标形式赋值, 会将元素追加至末尾
arr[6]="bb" #当前数组当中有4个元素

#获取数组长度
echo ${#arr[@]}

#遍历数组
for item in ${arr[@]}
do
echo ${item}
done

#删除数组元素
unset arr[1]
  • linux
  • shell
  • linux

扫一扫,分享到微信

2.2、shell编程(3)-流程控制与函数
2.1、shell编程(2)-从入门到重新入门 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆