侧边栏壁纸
博主头像
随心 博主等级

没有天赋,那就一直重复

  • 累计撰写 13 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

shell使用介绍

随心
2025-06-27 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

Shell概述

shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

脚本格式

脚本以#!/bin/bash开头(指定解析器)

常用系统变量

$HOME $PWD $SHELL $USER

自定义变量

基本语法

  1. 定义变量:变量=值 等号两边不能留有空格

  2. 撤销变量:unset 变量

  3. 输出变量:echo $变量

  4. 声明静态变量: readonly 变量,注意:不能unset

变量定义规则

  1. 变量名称可以由字母,数字和下划线组成,不能以数字开头,环境变量名建议大写

  2. 等号两侧不能有空格

  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

  4. 变量的值如果有空格,需要使用双引号或单引号括起来

  1. 可把变量提升为全局变量,可供其他shell程序使用
    export 变量

特殊变量

$n

$n (描述:n为数字,$0代表脚本名称,10以内参数用$1-9 表 示 , 10 以 上 的 需 要 用 大 括 号 包 含 , 9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,{10})

$#

$# (功能描述:获取所有输入参数个数,常用于循环)

$* (描述:代表命令行中所有的参数,把所有参数看成一个整体)

$@ (描述:也代表命令行中所有的参数,不过把每个参数区分对待)

$?

$? (描述:最后一次执行命令的状态,0:正确执行)

运算符

  1. $((运算式)) 或 $[运算式]

  2. expr +,-,\*,/,% 加减乘除取余
    expr运算符间要有空格

expr 2 + 3

expr $(expr 2 + 3) \* 4

常用判断条件

两个整数之间比较

(( 数字 ><= 数字 ))可以这样写,不用写英文的那个,这个简单一些,好记。

echo #?检查。

两个整数之间比较

或者就是下面英文的这些。

符号

描述

-lt

(less than)小于

-le

(less equal) 小于等于

-eq

(equal)等于

-gt

(greater than) 大于

-ge

(greater equal) 大于等于

-ne

(not equal) 不等于

文件权限判断

  • -r 有读的权限

  • -w 有写的权限

  • -x 有执行的权限

[ -rwx 文件名 ] 判断文件权限

echo #?检查。

文件类型判断

  • -f 文件存在并且是一个常规文件

  • -e 文件存在

  • -d 文件存在病是一个目录

[ -fed 文件名 ] 判断文件

echo #?检查。

多条件判断

&& || :&前一条成功,执行下一条 || 前一条执行失败,执行下一条。

IF 判断:

#!/bin/bash

if [ $1 -eq 1 ]  #判断式必须有空格

then

	echo "123"

elif [ $1 -eq 2 ]

then

	echo "456"

fi

case 语句

#!/bin/bash
case $1 in
1)  ##变量是1执行1内容
	echo "123"
;;
2)  ##变量是2执行2内容
	echo "456"
;;
*) ##变量是任意额外值执行3内容
    echo "789"
;;
esac

for循环

语法1

#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
	s=$[$s+$i]	
done
echo $s

语法2

#!/bin/bash
for i in $*  ##可以加多个参数,单独每行输出,也可吧$*加上"",这样多个参数合成一个参数,只输出一行。
do
	echo $i
done

WHILE循环

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
	s=$[$s + $i]
	i=$[$i + 1]
done
echo $s


read读取控制台输入

read(选项)(参数)

AI写代码

-p 指定读取值时的提示符

-t 指定读取值时等待的时间(秒)

# 提示7秒内,读取控制台输入的名称
#!/bin/bash
read -t 7 -p "在7s内请输入你的名字" NAME
echo $NAME

sed

sed是一种流编辑器,它一次处理一行内容。

-e 直接在指令列模式上进行sed的动作编辑

-i 修改

a 新增

d 删除

s 查找并替换

sed “s/旧/新/” 文件名 #加-i直接修改文件。如果在 新/g 加个g(global)那么每行旧参数的都将替换,不加,只换一行的第一个。

sed “行号s/旧/新/” 文件名

sed “/字符/ d” 文件名 #包含某个字符的。

sed “行号d” 文件名,删除某行。

sed "a字符" 文件名 #在每行下面都加,如果a前面加行号,就是哪一行下面添加。

可以连写,sed -e “” -e “” 文件名 示例:sed -e "2d" -e "s/echo/fsd/" a.sh

awk

awk 一个强大文件分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

-F 指定输入文件分隔符

-v 赋值一个用户定义变量

AWK 基本结构:

awk '模式 { 动作 }' 文件名

$0: 整行内容

$1, $2, ...: 第1, 第2,...列

NF: 当前行的字段数

NR: 当前行号

FS: 输入字段分隔符(默认空格)

OFS: 输出字段分隔符

示例:

awk '{print}' data.txt #打印整个文本

awk '{print $1, $3}' data.txt #输出1.3列

awk '{print NR, $0}' data.txt #输出行号,加所有内容。

awk '$2 > 条件 {print $1, $2}' data.txt #增加条件输出1.2行,并且符合条件的。

awk 'NR>1' data.txt #打印出第一行的所有内容。

沉默了,学无止境。

0

评论区