首页 > 系统相关 >Shell入门

Shell入门

时间:2022-11-27 22:47:00浏览次数:40  
标签:脚本 Shell 入门 参数 执行 condition 变量

一、Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

二、脚本格式要求

  • 脚本 #!/bin/bash 开头
  • 脚本需要有可执行权限
  • 单行注释:#
  • 多行注释::<<! 换行符 注释内容 换行符 !

三、Shell脚本的常用执行方式

  • 方式一(输入脚本的绝对路径或相对路径)
    说明:首先要赋予脚本可执行权限,再执行脚本。相对路径:./*.sh,绝对路径:/root/*.sh
  • 方式二(sh 脚本)
    说明:不用赋予脚本可执行权限,直接执行即可。比如:sh *.sh

四、Shell变量

①变量分类

  • 系统变量
  • 用户自定义变量

②变量的定义与撤销

  • 定义变量:变量名=变量值
  • 声明静态变量:readonly 变量
  • 撤销变量:unset 变量,注意:静态变量不能撤销

③变量定义的规则

  • 变量名称可以由字母、数字、下划线组成,但是不能以数字打头
  • 等号两侧不能有空格
  • 变量名称一般习惯大写,这是一个规范,我们遵守即可

④将命令的值赋给变量

  • 一对反引号``,比如 A=`date`,将 date 命令返回的值赋给 A变量
  • $(),比如 A=$(date),将 date 命令返回的值赋给 A变量

⑤设置环境变量

  1. export 变量名=变量值 (功能描述:将Shell变量输出为环境变量/全局变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)

⑥位置参数变量

作用:帮助我们获取 命令行的参数信息

  • $n 功能描述:n为数字,$0表示命令本身,$1-$9代表第1到第9个参数,10以上的参数需要用{}包含,如${10}
  • $* 功能描述:代表命令行的所有参数,把所有参数看作一个整体
  • $@ 功能描述:代表命令行的所有参数,把每个参数区分对待
  • $# 功能描述:代表命令行所有参数的个数

⑦预定义变量

Shell设计者事先已经定义好的变量,可以在shell脚本中直接使用

  • $$ 当前进程的进程号(PID)
  • $! 后台运行的最后一个进程的进程号
  • $? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确

五、运算符

  • $((运算式))
  • $[运算式] 推荐使用
  • expr m + n 或者 expression 表达式。注意 expr 运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用``,\*,/,% 表示乘,除,取余

六、条件判断

  • [ condition ] (注意condition前后要有空格,condition非空返回true,空返回false)
  • [ condition ] && echo "ok" || echo "not ok" #效果类似Java的三元运算符

常用判断比较

  1. = 字符串比较
  2. 两个整数的比较
  • -lt 小于
  • -le 小于等于
  • -eq 等于
  • -gt 大于
  • -ge 大于等于
  • -ne 不等于
  1. 按文件权限进行判断
  • -r 有读的权限
  • -w 有写的权限
  • -x 有执行的权限
  1. 按照文件类型进行判断
  • -f 文件存在并且是一个常规文件
  • -e 文件存在
  • -d 文件存在且是一个目录

七、流程控制

  1. if 判断
    单分支
    if [ condition ]
    then
    代码
    fi

    多分支
    if [ condition1 ]
    then
    代码1
    elif [ condition ]
    then
    代码
    fi
  2. case 语句
    case $变量名 in
    "值1")
    如果变量的值等于值1,则执行此处代码
    ;;
    "值2")
    如果变量的值等于值2,则执行此处代码
    ;;
    "*")
    如果变量的值均不等于以上值,则执行此处代码
    ;;
    esac
  3. for 循环
    for 变量 in 值1 值2 值3
    do
    程序/代码
    done

    for(( 初始值;循环控制条件;变量变化))
    do
    程序/代码
    done
  4. while 循环
    while [ condition ]
    do
    程序/代码
    done
    注意:while 和 [间有空格,condition 与 [] 间有空格

八、read读取控制台输入

read (选项) (参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了;
参数:
变量:指定读取值得变量名

九、函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数

  • 常用系统函数
    basename [string] [suffix] #basename命令会删掉所有得前缀包括最后一个 '/' 字符,如果指定了 suffix,basename 会将 string 中得 suffix 去掉(常用于获取文件名)
    dirname 文件绝对路径 #从给定的包含绝对路径的文件名中去除文件名,然后返回剩下的路径(常用于获取路径)
  • 自定义函数
    [ function ] funname[()]
    {
    Action;
    [return int;]
    }
    调用直接写函数名:funname [值]

标签:脚本,Shell,入门,参数,执行,condition,变量
From: https://www.cnblogs.com/MuYg/p/16930798.html

相关文章

  • Java入门代码练习
    一、第一个Java程序1、helloworldpublicclassHello{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}2、变量i......
  • github及git入门笔记
    1githubhttps://github.com/1.1github注册进入官方https://github.com/首页,点击如下图片中signup按钮,按照提示信息注册即可。注册好之后,如下图所示1.2github......
  • 学习Java掌握那些知识就入门了
    了解Java的基础Java基本语法、Java平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Jav......
  • 将shell切换为TTY
    pythonpython-c'importpty;pty.spawn("/bin/bash")'#python2python3-c'importpty;pty.spawn("/bin/bash")'#python3stty获取到shell后,先Ctrl+z放到后台......
  • Velocity模板引擎的的使用示例(入门级)
    简单说下这个引擎的两个分支(虽然语言不同调用方法大同小异):1、Java平台下的:org.apache.velocity2、.Net平台下的:NVelocity注:本文章不涉及到后端只说模板的使用方法基本......
  • SDN控制器-ONOS源码编译与mininet快速入门
    SDN控制器-ONOS源码编译与mininet​​所需环境​​​​系统要求​​​​onos编译软件环境安装​​​​依赖软件安装​​​​Bazel/Bazelisk安装​​​​jdk11安装(可选)​​......
  • Hadoop Shell 命令详解
    HadoopShell命令​​FSShell​​​​cat​​​​chgrp​​​​chmod​​​​chown​​​​copyFromLocal​​​​copyToLocal​​​​cp​​​​du​​​​dus​​​​exp......
  • OllyDBG 入门系列(三)-函数
    在第一篇中已经介绍了领空的概念,如我这里调试这个程序时 OllyDBG 的标题栏显示的就是“[CPU - 主线程, 模块 - CrackHea]”,这表明我们当前在被调试程序的领空)。通过......
  • Mybatis 入门实战(3)--Spring Boot 中使用 Mybatis
    本文主要介绍如何在SpringBoot中使用Mybatis,相关的环境及软件信息如下:SpringBoot2.6.12、Mybatis3.5.9。1、工程整体结构使用Maven来构建工程,工程目录结构如下:......
  • 带你了解LINUX反弹Shell的各种姿势(超详细)
    简介LInux反弹Shell(ReveserShell),也可以称为反向Shell,由被控制端主动向控制端发送请求建立通讯,随后将执行命令的结果输出到控制端,本质上是网络概念的客户端与服......