Shell—1.开篇基础

Shell本身是命令行解释器,也是一个编程语言 解释性语言


 

shell种类

cat /etc/shells

/bin/sh              # 是bash的一个快捷方式      1和2是一个东西
/bin/bash            # bash是大多数linux默认的shell  包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin        # 表示非交互 不能登陆操作系统
/bin/dash            # 小巧,高效,功能相比少一些
/bin/csh             # 具有c语言风格的一种shell 又有许多特性 但也有一些缺陷
/bin/tcsh            # 是csh的增强版,完全兼容csh

 

引用和使用

[root@wg ~]# echo "hello world!"      # 单引号双引号都阔以
hello world!

[root@wg ~]# cat /etc/shells          # 查看支持哪些shell
/bin/sh
/bin/bash
...

[root@wg ~]# which bash
/usr/bin/bash

- #! 是一个特殊写法,放在shell脚本开头作为标识,表示是shell脚本,不能省略
| #!/bin/bash           # 或者 #!/bin/sh ;写成/usr/bin/bash
| #!/bin/env bash       # env用于显示系统中已存在环境变量,以及在定义的环境中执行指令
|                       # env会从用户定义的PATH中寻找bash解释器,移植性更好
| #!/bin/env python     # 引用python,这时候是python脚本

- 养成写注释的良好习惯,最好分段也写,shell用 # 注释
| #!/usr/bash
| #Author: $author
| #Created Time: $date
| #name:first.sh
| #desc:描述
| #path:/tmp/tuzi
| #usage:用法

- cat -A xx.sh             # 查看shell脚本的全部内容,含隐藏内容!
- dos2unix xx.sh           # 把windows下编辑的脚本改成linux下的 
- unix2dos                 # 相反的命令

- 调用脚本的三种方式:
| ./xx.sh
| 绝对路径文件名
| bash xx.sh               # 不用赋权限

- 脚本的标准执行方式 要有执行权限
- 非标准的执行方式,直接在命令行指定解释器执行或source
| bash -x xx.sh      # 查看脚本的源代码(执行过程)一般用于排错
| bash -n xx.sh      # 查看脚本语法是否有问题
| source xx.sh       # 重新读取脚本
| 查看执行过程,使用source命令读取脚本文件,都不需要执行权限

echo "$(date '+%F %T')"

 

特殊符号

- ~  家目录                                                # cd ~ 返回家目录
- !  执行历史命令                                           # !! 执行上一条命令
- $  变量中内容
- &  后台执行
- *  shell的通配符,匹配所有
- ?  匹配除回车以外的一个字符
- ;  在shell中表示一行执行多个命令,命令之间用分号分割。
- |  管道    
- \  转义
- `` 反引号  命令中 执行命令   echo "today is `date +%F`"
- '' 单引号  脚本中字符串要用单引号引起来,但是单引号不能解释变量
- "" 双引号  脚本中出现的字符串可以用双引号引起来


--- 部分符号输出结果对比 ---

[root@wg ~]# echo date +%F
date +%F
[root@wg ~]# echo 'date +%F'
date +%F
[root@wg ~]# echo "date +%F"
date +%F
[root@wg ~]# echo $'date +%F'
date +%F
[root@wg ~]# echo $"date +%F"
date +%F

[root@wg ~]# echo `date +%F`
2012-12-12
[root@wg ~]# echo $(date +%F)
2012-12-12
[root@wg ~]# echo ;date +%F   // 这里其实换行了 应该写 echo -n;date +%F
2012-12-12


 

通配符

- 通配符跟特殊符号有重复的地方,放在一起整理下

- ?   匹配一个任意字符
- *    匹配0个或任意多个字符 也就是可以匹配任何内容
- []   匹配中括号中任意一个字符
- [-]  匹配汇总括号中任意一个字符 -代表一个范围
- [^]  逻辑非 代表匹配不是中括号内的一个字符

- ()   在子shell中执行
| (cd /opt;ls)        // 仅查询 opt 目录,自己环境未变化

- {}  集合 touch file{1..9}    // 创建file1到9文件
- \   转义符

 

常用快捷键

ctrl+a    把光标移动到命令行首
ctrl+e    把光标移动到命令行尾  这两个是在修改语句的时候使用

ctrl+u    删除或剪切贯标之前的内容
ctrl+k    删除或剪切光标之后的内容
ctrl+y    粘贴u或k的内容

ctrl+r    在历史命令中搜索 按下后悔出现搜索界面

ctrl+l    清屏
ctrl+c    强制终止当前命令
ctrl+d    退出当前终端
ctrl+z    暂停当前进程,放入后台
ctrl+s    暂停屏幕输出
ctrl+q    恢复屏幕输出

 

运算符


1、逻辑运算符

- ;  命令1;命令2; 多个命令顺序执行,命令之间没有任何逻辑关系

- &&  逻辑与的关系  命令1正确执行 命令2才会执行

- ||  逻辑或的关系  命令1执行不正确 命令2才会执行  反之同样~

- dd if=输入文件 of=输出文件 bs=字节数 count=个数
| if 指定源文件或源设备
| of 指定目标文件或目标设备
| bs 指定一次输入/输出多少字节 即把这些字节看做一个数据块
| count 指定输入输出多少个数据块

2、运算符使用

- declare声明变量类型
| declare 【+/-】【选项】变量名
| 减号 给变量设定类型属性
| 加号 取消变量的类型属性
| -i   将变量声明为整数型
| -x   将变量声明为环境变量
| -p   显示指定变量的被声明的类型

- 数值运算方法
| declare -i cc=$aa+$bb  先给aa,bb赋值再执行

- 运算方法2 用exprlet运算工具
| dd = $(expr $aa + $bb) 运算符两侧空格不能省略

- 运算方法3 $((运算式)) 或 $[运算式]
| ee=$(($aa+$bb))   ff=$[$aa+$bb]

- 支持的运算符 数值越高优先级越高

四则运算

- 方式一: let
| let sum=2+3;echo $sum
| i=4;let i++;echo $i
| n=1;let n=n+1;echo $n

- 方式二: expr
| expr 1 + 1  运算符号前后必须空格  
| * 需要反斜杠转义  
| 只有expr不能求幂
| expr $num1 + $num2

- 方式三: bc程序
| echo 1+1.5|bc
| 
| bc 命令可以直接进入程序,在里边进行运算

- 方式四: $(())
| echo $(($num1+$num2))
| echo $((num1+num2))
| sum=$((1+2));echo $sum

- 方式五: $[]
| echo $[5+2]

- i++ 先赋值,再运算
- ++i 先运算,再赋值

 

Bash基本功能

1、history

- 查看历史命令;退出重启后才能看到新输入的命令

- history 【选项】【历史命令文件】

- -c 清空历史命令 

- -w 把历史命令写入历史命令保存文件

- 历史命令文件保存在家目录下 .bash_history

- 默认保存1000条历史命令,可在配置文件中修改

- 配置文件保存在  /etc/profile

- !字符串 !! !数字 三种方式

2、alias

- alias 别名="原命令"          // 一定要加引号

- 写入 /root/.bashrc 让别名永久生效

- unalias 删除别名

3、标准输入输出

- 键盘    /dev/stdin   0     输入
- 显示器  /dev/stdout  1     输出
- 显示器  /dev/sdterr  2     错误输出

4、管道符

- 命令格式  命令1|命令2  命令1的正确输出作为命令2的操作执行

- grep 【选项】 '搜索内容'/文件名
| -i  忽略大小写
| -n  输出行号
| -v  反向查找
| --color=auto   把搜索出的关键字用颜色显示

- tee 三通管道符

 

输入输出重定向

- 命令 > 文件  以覆盖的方式 把命令的正确输出,输出到指定的文件或设备当中。
- 命令 >> 文件  以追加的方式,把命令的正确输出,输出到指定的文件或设备当中。
- 命令 2> 文件 以覆盖的方式 把命令的错误输出。。。。
- 命令 2>> 文件 以追加的方式 把命令的错误输出。。。
- 命令 > 文件 2>&1 以覆盖方式 把正确和错误都保存到一个文件
- 命令 >> 文件 2>&1 以追加的方式 把正确和错误都保存到一个文件
- 命令 &> 文件 以覆盖方式 把正确和错误。。。
- 命令 &>> 文件  以追加的方式 把正确输出和错误输出都保存到一个文件当中

- 命令 >>文件1 2>>文件2 把正确的追加到文件1 把错误的追加到文件2
- 命令 &>/dev/null 相当于执行结果都放进垃圾箱

- wc 【选项】【文件名】  命令<文件
| -c 统计字节数
| -w 统计单词数
| -l 统计行数

 

前后台作业控制

- &
- nohup
- ^C
- ^Z        // 把作业隐藏到后台
- bg        
- fg        // 把作业调回来    
- kill
- screen


# 在前台结束进程
Control+C
 
# 在前台暂停进程
Control+Z
 
# 查看后台执行的进程 查看进程号码
jobs
 
# 运行命令时,在命令末尾加上&可让命令在后台执行
&
 
# 将命令进程号码为N的命令进程放到前台执行
fg processNum
# 或者
%processNum
 
# 将命令进程号码为N的命令进程放到后台执行
bg processNum

 

颜色设置

echo -e "\e[1;33mthis is a red text.\e[0m"

- 3开头前景色
- 4开头背景色

 

知识体系

- 变量
| 自定义变量
| 系统环境变量
| 预定义变量
| 位置参数变量
| 内置变量

- 条件判断
- 循环语句
- 流程控制
- 函数   function
- 数组   array
- 正则表达式
posted @   梵高de画笔  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示