• Shell学习笔记(一)


    1.Shell提示符 #,$

    对于普通用户,base shell 默认的提示符是$,对于超级用户(root用户),base shell 默认提示符是#。该符号表示Shell等待输入命令。

    [root@sijizhen ~]# 

    这种格式包含了以下三个方面的信息:

    • 启动 Shell 的用户名,也即 root;
    • 本地主机名称,也即 sijizhen;
    • 当前目录,波浪号~是主目录的简写表示法。

    2.Shell脚本编写示例

    打开文本编辑器,新建一个文本文件,并命名为 backup.sh。

    扩展名sh代表shell,扩展名并不影响脚本的执行。

    在backup.sh中输入代码

    1 #!/bin/bash
    2 echo "Hello World !"  #这是一条语句

    第一行的#!是约定标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的/bin/bash就是指明了解释器的具体位置。

    第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指终端)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。

    3.执行Shell脚本

    Shell 脚本也是一种解释执行的程序,可以在终端直接调用(需要使用 chmod 命令给 Shell 脚本加上执行权限),如下所示:

    1 [root@sijizhen ~]# cd /mnt/demo             #切换到 backup.sh 所在的目录
    2 [root@sijizhen demo]# chmod +x ./backup.sh  #使脚本具有执行权限
    3 [root@sijizhen demo]# ./backup.sh           #执行脚本
    4 Hello world

    第 2 行中,chmod +x表示给 backup.sh 增加执行权限。

    第 3 行中,./表示当前目录,整条命令的意思是执行当前目录下的 backup.sh 脚本。如果不写./Linux 会到系统路径(由 PATH 环境变量指定)下查找 backup.sh,而系统路径下显然不存在这个脚本,所以会执行失败。

    通过这种方式运行脚本,第一行一定要写对,好让系统查找到正确的解释器。

    1) 使用点号“.”

    点号用于执行某个脚本,甚至脚本没有可执行权限也可以运行。有时候在测试运行某个脚本时可能并不想为此修改脚本权限,这时候就可以使用.来运行脚本,非常方便。

    编写下面的代码并保存为 backup.sh:

    1 #!/bin/bash
    2 echo "http://c.biancheng.net/shell/"

    如果没有运行权限的话,用./执行就会有报错,但是若在其前面使用点号来执行就不会报错,如下所示:

    1 $ ./backup.sh
    2 bash: .test.sh: Permission denied

    使用.增加 test.sh 的执行权限,就可以正常运行了:

    1 $ . ./backup.sh
    2 http://c.biancheng.net/shell/

    2) 使用 source 命令

    与点号类似,source 命令也可读取并在当前环境中执行脚本,同时还可返回脚本中最后一个命令的返回状态;如果没有返回值则返回 0,代表执行成功;如果未找到指定的脚本则返回 false。

    1 [root@sijizhen demo]# source backup.sh
    2 Hello world

    作为解释器参数

    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

    1 [root@sijizhen demo]# /bin/bash backup.sh
    2 Hello world
    脚踏实地,仰望星空。
  • 相关阅读:
    通过 curl 命令访问 K8S API
    k8s 调度 Affinity
    golang 定期发送 RA 报文
    Ticker 使用
    查看 host/container veth pair 关系
    Kubernetes 服务 service 的负载均衡分析
    698 TypeScript泛型的使用:泛型实现类型参数化,泛型接口,泛型类,泛型约束
    697 TypeScript接口的使用:接口的声明,可选属性,只读属性,索引类型,函数类型,接口继承,交叉类型,接口的实现,字面量赋值,枚举类型
    696 TypeScript类的使用:类的定义,继承,多态,成员修饰符,readonly,getters/setters,静态成员,抽象类abstract,抽象类演练,类的类型
    695 TypeScript函数类型:可选参数,默认参数,剩余参数,this类型,函数的重载,联合类型和重载
  • 原文地址:https://www.cnblogs.com/sijizhen/p/10607804.html
Copyright © 2020-2023  润新知