shell编程(一)
创始人
2024-04-16 19:37:00
0

shell 简介

Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。

Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系
统所能理解的指令)

在这里插入图片描述

第一个shell脚本

创建一个shell脚本–test.sh

#! /bin/sh
echo "hello world"

echo "hello world"很简单就是输出字符串hello world

#! /bin/bash -->告诉操作系统用哪种类型的shell来解释执行该程序

如何执行改脚本,创建test.sh是个普通文件,使用ls -l可以查看,该文件没有可执行权限,使用

chmod u+x test.sh,给脚本添加上可执行权限。

ghost-linux@ghost-linux:~/shell$ ./test.sh 
hello world

输入和输出

echo

echo string

echo 是shell中用于输出的指令

​ 如果需要转义,可以加上-e选项;用-n选项来禁止echo命令输出后换行

在这里插入图片描述

read

read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量

read varible1 varible2 ...


管道

cmd1 | cmd2

​ 管道就是将一个命令cmd1的输出当做输入传给另一个命令cmd2

|是管道符号

​ 一般情况下,管道后面的操作都是查找grep、切割awk或替换seb

在这里插入图片描述

重定向

  • 系统已经定义的文件描述符

    • 标准输入:0
    • 标准输出:1
    • 标准错误:2
  • 重定向命令

    命令作用
    cmd > file将cmd重定向到file
    cmd >> file将cmd重定向追加到file
    m <& n将文件描述符n输入重定向到m
    m >& n将文件描述符m输出重定向到n
    cmd < file将file作为输入给cmd
    cmd << deli从标准输入中读入,直至遇到deli分界符
    cmd > file 2>&1把标准输出和标准错误一起重定向到file中

在这里插入图片描述

exec

  • exec执行shell命令

  • 操作文件描述符

    使用exec创建的文件描述符重定向,是永久有效,直到显示取消重定向,可以看下面例子

    #! /bin/bashecho "input 6<&0 name ouput to stdout"
    exec 6<&0 0> nameecho this is file name:
    cat nameecho "redirect stdout to exec.log"
    exec  1>exec.log
    wc -l nameecho "redirect stdout to stderr"
    exec 1>&2
    echo "redirect stdout to stderr over"
    wc -l nameecho "ouput exec.log"
    cat exec.log

变量

shell中用户可以建立变量来存储数据,但不支持数据类型,变量名命名规则:数字、字母、下划线,不能以数字开头。

环境变量

当前shell的环境设置的一些变量

export—设置新的环境变量
env—显示所有环境变量
set—显示所有本地的shell变量
unset—清除环境变量**(高危)**

常见的环境变量:

PWD=/home/ghost-linux/shell — 当前路径(绝对路径)
HOME=/home/ghost-linux — 家目录
USERNAME=ghost-linux —用户名

创建一个新的环境变量:
在这里插入图片描述

  • 在文件中添加
    1. /etc/profile文件中,使用export创建环境变量
    2. 执行source /etc/profile使环境变量生效

用户自定义变量

​ 1、在shell编程中通常使用全大写变量,方便识别
​ 2、变量的使用:在变量前加$
​ 3、Linux Shell/bash从右向左赋值
​ 4、使用unset命令删除变量的赋值 unset 变量名
COUNT=1
​ 注意:
​ 1、无数据类型,默认为字符串
​ 2、“=”两边没有空格

位置变量 即 命令行参数

  • $0:与键入的命令行一样,包含脚本文件名

  • $1,...$9:分别包含第一个到第九个命令行参数

  • $#:包含命令行参数的个数

  • $@ / $*:包含所有命令行参数 ——>“$1....$9”,区别在于$*返回的是一个字符串整体,$@是以空格分开的字符串集

  • $?:包含前一个命令的退出状态

  • $$:包含正在执行进程的ID号

#! /bin/bashecho this is '$0' = $0
echo '$1' = $1
echo '$2' = $2
echo '$#' = $#echo '$@' = $@
echo '$*' = $*
echo '$$' = $$
echo '$?' = $?

在这里插入图片描述

预定义变量

​ 预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成

  • $?:打印前一个命令的退出状态
  • $$:打印正在执行进程的ID号
  • $!:后台运行的最后一个进程的进程号(PID)

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...