什么是shell?

Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。

shell与Linux系统关系图

shell也能够编程

  1. 有if...else选择结构,case...in 开关语句,for、while、until循环
  2. 变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
  3. 函数,包含用户自定义的函数和内置函数(例如printf\export\eval等)

shell在运维中的地位

下面手链形象地展示了Shell在运维工作中的地位

先看一个简单的shell程序

#!/bin/bash
# This is to show what a example looks like. echo "This first example"
echo # This inserts an empth line in output.
echo "We are currently in the following directory"
pwd
echo
echo "This directory contains the following files"
ls

注释:

#!/bin/bash #!跟shell命令的完全路径。作用:显示后期命令以哪种shell来执行这些命令。如不指shell,以当前shell作为执行的shell

# shell 中以#开头表示,整行就被当作一个注释。执行时被忽略。

总结:

创建shell程序的步骤

第一步:创建一个包含命令和控制结构的shell文件
第二步:修改这个文件的权限使它可以执行,使用chmod u+x
第三步:执行
方法一:./{文件名}
方法二:使用决定路径 /root/../{文件名}
方法三:bash {文件名}

Shell变量

变量是shell传递数据的一种方法。变量使用来表示每个值的符号名

例:x=1

Shell 有两种变量:临时变量和永久变量。

临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对于其它程序不可见。

永久变量:是环境变量,其值不随shell脚本的执行结束而消失。

例:如:$PATH

# 用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找

用户定义变量:由字母或下划线打头。由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。

使用变量值时,要在变量名前加上前缀“$”。

例如:1VAR 就是非法变量。

变量赋值:赋值号“=”两边应没有空格。

例如:A=123

例如:将一个命令的执行结构赋值给变量

可以利用变量和其它字符组成一个新的字符串。

列出所有变量

set 列出所有变量

| 过滤

给变量赋值多个单词

单引号和双引号的区别

单引号之间的内容原封不动地指定给了变量,

双引号取消了空格的作用,保留特殊符号的含义

双引号:

单引号:

删除变量 unset

位置变量和特殊变量

位置变量:Shell 解释执行用户命令时,将命令行的第一个字作为命令名,而其它名字作为参数。由出现在命令行上的位置确定的参数称为位置参数。

特殊变量:有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量

$*:这个程序的所有参数
$#:这个程序的参数个数
$$:这个程序的PID
$!:执行上一个后台程序的PID
$?:执行上一个指令的返回值

程序例子:

#!/bin/bash
echo "$* 表示这个程序的所有参数"
echo "$# 表示这个程序的参数个数"
touch /tmp/a.txt echo "$$ 表示当前程序的ID"
touch /tmp/b.txt & echo "$! 执行上一个后台指令的PID"
echo "$$ 表示程序的进程ID"

结果:

变量的使用:

#!/bin/bash

var1="abcd efg"
echo $var1 var2=
echo "The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD

执行结果:

shell命令(一)的更多相关文章

  1. Hadoop Shell命令大全

    hadoop支持命令行操作HDFS文件系统,并且支持shell-like命令与HDFS文件系统交互,对于大多数程序猿/媛来说,shell-like命令行操作都是比较熟悉的,其实这也是Hadoop的极大 ...

  2. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

  3. 在程序中执行shell命令

    在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...

  4. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

  5. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  6. Linux SHELL 命令入门题目答案(一)

    1.如何使用shell 打印 “Hello World!” (1)如果你希望打印 !,那就不要将其放入双引号中,或者你可以通过转义字符转义(2)echo 'hello world!' 使用单引号ech ...

  7. Linux SHELL 命令入门题目(一)

    新年新气象,注重知识积累,提高手敲代码能力,而不是眼高手低,只会复制黏贴. 1.使用shell 打印 “Hello World!” 2.求变量'hello world'的字符长度 3.$0 .$SHE ...

  8. shell命令获取最新文件的名称

    最近有一个需求,在部署游戏战场服时,从程序包到部署需要做一些本地化的操作,手工操作费时费力,故写一个shell脚本,一键部署. 遇到的问题是每次要部署最新的程序包,因此需要shell命令获取最新的文件 ...

  9. 【转】Hadoop FS Shell命令

    FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args> 的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme ...

  10. [蟒蛇菜谱] Python封装shell命令

    # -*- coding: utf-8 -*- import os import subprocess import signal import pwd import sys class MockLo ...

随机推荐

  1. Natas26 Writeup(PHP反序列化漏洞)

    Natas26: 打开页面是一个输入坐标点进行绘图的页面. <html> <head> <!-- This stuff in the header has nothing ...

  2. Error 不再支持源选项 5。请使用 6 或更高版本。

    解决方案:在项目pom.xml中指定JDK版本 我的jdk版本是11.0.2 所以写的是11 根据你自己的jdk版本写 1.7/1.8~~~~ <properties>元素时根元素< ...

  3. html之样式

    HTML 样式 1. font字体 font-family 字体样式 比如:微软雅黑.Serif 字体.Sans-serif 字体.Monospace 字体.Cursive 字体.Fantasy 字体 ...

  4. OpenCV-Python 交互式前景提取使用GrabCut算法 | 三十五

    目标 在本章中, 我们将看到GrabCut算法来提取图像中的前景 我们将为此创建一个交互式应用程序. 理论 GrabCut算法由英国微软研究院的Carsten Rother,Vladimir Kolm ...

  5. 图像的特征工程:HOG特征描述子的介绍

    介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...

  6. eureka和zookeeper注册中心的区别

    ookeeper与Eureka区别 CPA理论:一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡. ...

  7. Git入门操作(一)

    最近真正用到了Git,感觉还是需要好好整理一下最最基础用法,与萌新共享.^_^ 关于Git的基础介绍,这里不再赘述,下面撸代码了(主要是命令行的操作,属于linux操作系统的,可能没听过,但记住就好了 ...

  8. Prism 源码解读6-事件聚合

    0 介绍 事件提供的是1对多的绑定,通过委托链实现对订阅者的调用,事件必须要通过发布者调用.同时事件订阅是强引用,事件订阅者的生命周期总是大于等于事件发布者.如果代码中事件很多就会充斥着各种事件的订阅 ...

  9. 文件输入输出实例&Ptask的编写

    前言 最近在写Ptask,顺便了解了如何进行文件读入输出.而在Ptask中最重要,也是最最容易出bug的地方就是文件操作.那么如何进行文件输入输出,在程序中起到重要作用呢? 输入 首先为了保证可以在控 ...

  10. NodeMCU入坑指南-低成本打造零舍友闻风丧胆WiFi断网神器

    前言 最近对IoT方面比较感兴趣,所以在某宝上入手了一块NodeMCU的开发板,至于为什么我选择这块开发板呢?嘿嘿,当然是因为便宜啊