IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Shell红客脚本命令 -> 正文阅读

[系统运维]Shell红客脚本命令

在这里插入图片描述


更多内容锁定Linux专栏
说明:Shell脚本功能强大,凡是涉及编程几乎都离不开它,学会本章,你将更上一层楼!


在这里插入图片描述

一、基本Shell命令

[root@hadoop01 linux_exam]# cat /etc/shells
/bin/sh /bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

问题: bash 和 sh 是什么关系?

sh 是 bash 的 快捷方式 软链接

$:代表引用
echo:显示在控制台
export PAexp$PATH:/dir/:不改变原来,追加
export PATH=/dir/:将环境变量重新赋值,覆盖
export PAexp$PATH:/dir/:不改变原来,追加

永久有效的脚本
写入:~./bashrc
生效:source ~. /bashrc

./ example.sh 外部参数1 外部参数2
$#:外部参数总个数
$*:以一个单字符串显示所有向脚本传递的参数。 如" 用 「 」 括 起 来 的 情 况 、 以 1 n"的形式输出所有参数。
* @ :与 @:与 @:与相同,但是使用时加引号,并在引号中返回每个参数。 如" @ " 用「 " 」括起来的情况、以 " 2 " … " @"用「"」括起来的情 况、以" 2" … " @"用「"」括起来的情况、以"2""n" 的形式输出所有参数。
$n:代表第n个参数,$1=外部参数1
$?:显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$$:当前Shell的进程号PID
$!:后台运行的最后一个进程的ID号
$-:显示Shell使用的当前选项,与set命令功能相同。
unset: 命令可以删除变量
readonly: 可以将变量定义为只读变量,只读变量值不能被改变
read :read num 接收键盘值num,read关键字

二、运行Shell脚本的方法

执行shell脚本
执行方式一

[root@hadoop01 shell]# /bin/sh hello.sh
hello world
[root@hadoop01 shell]# /bin/bash hello.sh
hello world

执行方式二
方式一的简化方式

[root@hadoop01 shell]# bash hello.sh
hello world
[root@hadoop01 shell]# sh hello.sh
hello world

执行方式三

[root@hadoop01 shell]# chmod 755 hello.sh
[root@hadoop01 shell]# ./hello.sh
hello world

三、特殊符号Shell命令

" ":形成对应的字符串值,可以被引用$,双引号里如果有脚本命令,如date显示日期,要生效,使用反引号丶丶【“to see 丶date丶”】
‘ ’:单引号里的内容,都视为普通字符,里面用$引用,或者用反引号,都是普通字符
丶丶:反引号作用是将双引号里面的shell命令,标识成命令
I:管道,配合其他命令使用一般
>:标准输出1,覆盖方式写入 ls 1 >文件内容.txt
<:标准输入0,echo 0<文件内容.txt
标准出错2:ls file 2>a.txt 出错,文件file不存在

注意:在重定向符号右边,标准输出/输入设备文件要写成&0,&1,&2,
举例: echo “hello” 1>&2

四、 shell注释

单行注释:和python注释相同,以#号开头作为单行注释

多行注释1:

:<<EOF  
注释内容...  
注释内容...  
注释内容...  
EOF

多行注释2:

# EOF可以换成其他符号
:<<E!
注释内容...
注释内容...
注释内容...
!

五、shell变量

在这里插入图片描述
在这里插入图片描述

六、 Shell命令printf命令

在这里插入图片描述

七、shell中常用的转义字符

在这里插入图片描述

八、字符串Shell命令

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串 可以用单引号,也可以用双引号,也可以不用引号。
【1】计算字符串个数

my@ubuntu:~$ var="APP"
my@ubuntu:~$ echo "${#var}"
3

获取字符串长度

skill='java'
echo ${skill} # 输出结果: java
echo ${#skill} # 输出结果: 4

【2】单引号

skill='java'
str='I am goot at $skill'
echo $str
输出结果为: 
I am goot at $skill

【3】双引号
在这里插入图片描述

【4】提取子字符串
以下实例从字符串第 2 个字符开始截取 2 个字符:

str="I am goot at $skill"
echo ${str:2} # 输出结果为: am goot at java
echo ${str:2:2} # 输出结果为: am

【5】传递参数
在这里插入图片描述
param.sh

#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
$ chmod 755 param.sh
$ ./param.sh 1 2 3
执行的文件名:./param.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

应用脚本举例:

#!/bin/bash
FunParam(){
    echo "输入第一个参数 $1 !"
    echo "输入第二个参数 $2 !"
    echo "输入第十个个参数 $10 !"
    echo "参数总数共 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
FunParam 1 2 3 4 5 6 7 8 9 10

执行脚本如下
在这里插入图片描述

【6】特殊字符

#!/bin/bash
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

【7】$* 与 $@ 区别

相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

#!/bin/bash
echo "-- $* 演示 ---"
for i in "$*"; do
echo $i
done
echo "-- $@ 演示 ---"
for i in "$@"; do
echo $i
Done

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

九、shell数组

定义数组
在 Shell 中,用括号()来定义表示数组,数组中元素用"空格"符号分割开。定义数组的一般形式为:

# 一般定义
array_name=(value1 value2 value3 value4)
 
# 多级定义1
array_test=(
value1 
value2 
value3 
value4
)
# 多级定义2
array_text[0]=value0
array_text[1]=value1
array_text[3]=value3
... 
...

读取数组:和读取变量名相同,使用$符号,需要加上下标名

valuen=${array_name[n]}
echo ${array_name[@]} # 读取所有

获取数组长度:获取数组长度的方法与获取字符串长度的方法相同,如图所示

# 取得数组元素的个数
length=${#array_name[@]}	# 从头到尾取
# 或者
length=${#array_name[*]}	# 取所有
# 取得数组单个元素的长度
lengthn=${#array_name[n]}	# 取特定 

十、Shell命令算术运算符

shell想要使用这些运算符,需要结合其他命令和工具来使用(因为shell中不支持简单的数学运算),如使用算符运算符就需要搭配的常用的工具有两种

`
awk
expr(使用频繁)
`

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。 原生 bash 不支持
简单的数学运算,但是可以通过其他命令来实现,例如expr。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加:

val=`expr 2 + 2`
echo $val

注意

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。 完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边。

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
在这里插入图片描述

注意:条件表达式要放在方括号之间,并且要有空格
例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。

十一、shell命令关系运算符

在这里插入图片描述

脚本编写如下

#!/bin/bash
 
a=10
b=20
 
if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi 

将脚本执行结果如下
在这里插入图片描述

十二、shell命令布尔运算符

在这里插入图片描述

脚本编写如下

#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi 

执行脚本,结果如下
在这里插入图片描述

十三、shell命令逻辑运算符

在这里插入图片描述

编写脚本如下

#!/bin/bash
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi 

在这里插入图片描述

十四、shell命令字符串运算符

在这里插入图片描述

#!/bin/bash
 
a="abc"
b="efg"
 
if [ $a != $b ]
then
   echo "$a != $b : a 等于 b"
else
   echo "$a != $b: a 不等于 b"
fi 

在这里插入图片描述


十五、测试shell命令

在这里插入图片描述


举例【1】:test 数值测试命令表

在这里插入图片描述


文件是否存在,可读?
打开脚本文件test.sh

#!/bin/bash
if [-e file ] && [-r file]
then
cat file
fi

两个字符串不相等!

#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

【2】字符串测试表
在这里插入图片描述
在这里插入图片描述

【3】文件测试表
在这里插入图片描述
在这里插入图片描述


举例【4】:多分支语句

#!/bin/bash
if [ -e file ]&&[ -r file ]
then
cat file
elif [ -e file ]
then
chmod u+r file
cat file
else
touch file
fi

举例【5】:switch分支

!/bin/bash
read VAR #键盘接收用户输入
case $VAR in #判断用户输入值
"1" echo "hello"
;;
"2" echo "word"
;;
"*" echo "unknown" #通配符,任意字符
esac

说明:可以写成1),和"1"等价


十六、循环语句Shell

举例1【while】

!/bin/bash
declare -i n=0
while [ $n -le 100] #如果n小于等于100,进行循环
do 
echo$nn=$n+1
done

举例2【until】

!bin/bash
declare -i n=0
until [ $n -gt 100] #如果n大于100,退出循环
do 
echo$nn=$n+1
done

举例3[for]

!/bin/bash
files=丶ls丶 #执行命令,获取所有文件名
for filename in $files
do
if [ -f $filename ]
then
wc -l $filename
fi
done

举例4 【if else条件】
如果存在不满足的条件的情况

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

在多层嵌套条件情况

if condition1
then
    command1
elif condition2 


then 
    command2
else
    commandN
fi

应用举例

num1=$[6]
num2=$[8]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi

执行脚本,结果输出如下

两个数字相等!

举例5 【case条件】
在这里插入图片描述

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read num
case $num in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac
执行脚本,运行如下:
输入 15 之间的数字:4
你输入的数字为 4!
输入 15 之间的数字:8
你输入的数字不是 15 之间的! 游戏结束

在这里插入图片描述
在这里插入图片描述


函数举例,仅供参考作用:
在这里插入图片描述

trap命令使用:
trap  -l    :查看Linux信号

在这里插入图片描述


十七、shell函数

在这里插入图片描述

#!/bin/bash
FunReturn(){
    echo "两个数字进行相加运算..."
    echo "输入第一个数字: "
    read num
    echo "输入第二个数字: "
    read anothernum
    echo "两个数字分别为 $num$anothernum !"
    return $(($num+$anothernum))	# 分别返回数值
}
FunReturn		# 调用函数
echo "输入的两个数字之和为 $? !" # 使用通配符获取上一条指令的返回值

在这里插入图片描述

需要注意的是

所有的函数在使用前必须定义,这是因为shell解释器是顺序逐层执行的,当shell解释器发现定义的函数时,才会找到其对应的功能,进而执行。

十八、Shell实现获取本机IP地址网段

┌──(root?kali)-[/mnt/hgfs]
└─# ./my_ipbash.sh eth0
192.168.xx.x
。。。。。。
。。。。。。

在这里插入图片描述


说明:都刷到这里了,能一箭三连吗/😕/😕

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:24:17  更:2022-09-30 01:27:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:54:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计