Linux Shell:从入门到‘删库跑路’

admin 2025年6月6日21:45:59评论0 views字数 2661阅读8分52秒阅读模式

一、Shell基础知识详解

1.1 认识Shell环境

为什么学习shell编程

Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚本的内容

每一个合格的Linux系统管理员或运维工程师,都需要熟练的编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容

只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础

| 学好Shell编程所需的基础知识

  • 能够熟练使用vim编辑器,熟悉SSH终端
  • 有一定的Linux命令基础,至少需要掌握80个以上Linux常用命令,并能够熟练使用它。
  • 要熟练掌握Linux正则表达式及三剑客命令(grep,sed,awk)

| 如何学好Shel编程

  • 学好Shel编程的核心:多练-->多思考-->再练-->再思考,坚持如此循环即可!
  • 新手大忌:不可拿来主义,可以模仿,但是要自己嚼烂了吃下去。
  • 格言:你觉得会了并不一定会了,你认为对的并不一定对的。
Linux Shell:从入门到‘删库跑路’

专业角度看Shell

  • Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户
  • 这种对话方式可以是:
    1. 交互的方式:从键盘输入命令,通过/bin/bash的解释器,可以立即得到shell的回应
    2. 非交互的方式:脚本

常见的Shell类型

目前主流的Shell包括:

    • Bourne Shell (/usr/bin/sh/bin/sh)
    • Bourne Again Shell (/bin/bash)
    • C Shell (/usr/bin/csh)
    • K Shell (/usr/bin/ksh)
    • Shell for Root (/sbin/sh)

在实际工作中,最常用的是Bash(Bourne Again Shell),它因易用性和开源特性被广泛应用,也是大多数Linux系统的默认Shell环境。

1.2 Shell编程规范

编写Shell脚本需要注意什么?

编写高质量Shell脚本需遵循以下规范:

    • 脚本命名:采用英文字母(大小写皆可),后缀为.sh
    • 避免使用特殊符号、空格等命名
    • 脚本名称应当一目了然,表明功能
    • 脚本首行必须以#!/bin/bash开头声明解释器
    • 变量命名不能以数字或特殊符号开头,可使用下划线(_),但不能使用破折号(-)

1.3 创建第一个Shell脚本

如何Shell编程

  1. 重点掌握前面的内容:变量、判断、bash,对它们彻底理解
  2. 先看懂,读懂shell脚本
  3. 讲完判断,将前面学过的脚本进行完善
  4. 自己写简单的脚本,如一些小的项目:生活中:随机点餐、大保健、会员办理,消费、服务 对应价格不同 结账 会员账号 密码 密码丢失
  5. 有基本适合自己的教材,如:跟老男孩学习Shell编程或者完善的文档
  6. 不能拿来及用,要搞懂、变成自己的,吸收了后可以解决企业中大部分的shell问题

一个shell脚本

# cat test.sh

#!/bin/bash

echo "Hello World!"


| 执行脚本的三种常用的方式

(1)使用bash或者sh通过解释器执行脚本
在子shell中执行命令

# sh test.sh

Hello World!

# bash test.sh

Hello World!


(2)使用路径方式

全路径执行方式或者当前路径,必须给x权限

# chmod +x test.sh

# /server/scripts/test.sh

Hello World!

# ./test.sh

Hello World!


(3)使用source或者 . 的方式

# . test.sh

Hello World!

# source test.sh

Hello World!


(4)其他shell的执行方式

Linux Shell:从入门到‘删库跑路’

# cat test.sh | bash

Hello World!

# echo ls | bash

test.sh

# bash < test.sh

Hello World!


shell变量基础

| 什么是变量

shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义,所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。

shell变量可分为两类:局部变量和环境变量

  • 局部变量只在创建它们的shell中可用
  • 环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用

有些变量是用户创建的,其他的则是专用shell变量

  • 变量名必须以字母或下划线字符开头,其余的字符可以是字母、数字(0~9)或下划线字符
  • 变量名字是大小写敏感的,环境变量推荐设置为字母大写
  • 给变量赋值时,等号周围不能有任何空白符,为了给变量赋空值,可以在等号后跟一个换行符

变量删除:用set命令可以查看所有的变量,unset var命令可以清除变量var,var相当于没有定义过

变量只读:readonly var可以把var变为只读变量,定义之后不能对var进行任何更改

对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。

| 变量值的定义

字符串定义

# name=Iamlizhenya

# name='I am lizhenya'

# name="I am lizhenya"

# echo $name

I am lizhenya


双引号和单引号的区别:双引号解析变量,单引号所见即所得不能解析变量,不加引号可以解析变量

数字的定义

# age="12 23 432"

# echo $age

12 23 432


命令的定义

通过``调用命令

# date +%F-%H-%M-%S

2022-07-07-18-02-34

# time=`date +%F-%H-%M-%S`

# echo $time

2022-07-07-18-02-40

# 时间是固定 每次调用都相同

# echo $time

2022-07-07-18-02-40

通过$()调用命令

# time=$(date +%F-%H-%M-%S)

# echo $time

2022-07-07-18-02-52


| 变量可以定义变量

# ip=`ifconfig eth0|awk 'NR==2{print $2}'`

# echo $ip

10.0.0.7

# dir=${ip}_${time}

# echo $dir

10.0.0.7_2022-07-07-18-11-34


当shell脚本中出现2条以上相同的命令就将它们写成变量

| 核心位置变量

Linux Shell:从入门到‘删库跑路’

echo hehe...........


 

原文始发于微信公众号(Z2O安全攻防):Linux Shell:从入门到‘删库跑路’

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月6日21:45:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux Shell:从入门到‘删库跑路’https://cn-sec.com/archives/4142238.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息