Shell概述
shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
脚本格式
脚本以#!/bin/bash开头(指定解析器)
常用系统变量
$HOME $PWD $SHELL $USER
自定义变量
基本语法
定义变量:变量=值 等号两边不能留有空格
撤销变量:unset 变量
输出变量:echo $变量
声明静态变量: readonly 变量,注意:不能unset
变量定义规则
变量名称可以由字母,数字和下划线组成,不能以数字开头,环境变量名建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号或单引号括起来
可把变量提升为全局变量,可供其他shell程序使用
export 变量
特殊变量
$n
$n (描述:n为数字,$0代表脚本名称,10以内参数用$1-9 表 示 , 10 以 上 的 需 要 用 大 括 号 包 含 , 9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,{10})
$#
$# (功能描述:获取所有输入参数个数,常用于循环)
$* (描述:代表命令行中所有的参数,把所有参数看成一个整体)
$@ (描述:也代表命令行中所有的参数,不过把每个参数区分对待)
$?
$? (描述:最后一次执行命令的状态,0:正确执行)
运算符
$((运算式)) 或 $[运算式]
expr +,-,\*,/,% 加减乘除取余
expr运算符间要有空格
expr 2 + 3
expr $(expr 2 + 3) \* 4
常用判断条件
两个整数之间比较
(( 数字 ><= 数字 ))可以这样写,不用写英文的那个,这个简单一些,好记。
echo #?检查。
两个整数之间比较
或者就是下面英文的这些。
文件权限判断
-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 #打印出第一行的所有内容。
沉默了,学无止境。
评论区