bash 基础

本文介绍了Bash的基础知识,包括Shell的作用、常见的shell解释器如bash、zsh,以及基本的Bash命令如文件操作、进程查看。此外,还详细讲解了Bash脚本编程中的变量、数据类型、运算、条件语句、比较符、循环、函数以及重定向和交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell 

Shell 不仅仅是命令行,也可以是GUI

Shell 是操作系统和用户交互的“接口

一般来说,我们说的Shell都是Unix Shell,可以认为是CLI

命令 / command 

命令的本质是一个程序

这些程序具有发起系统调用(System Call)的能力

编写Shell脚本,其实是在编排这些程序的执行

除此之外,还有Shell语法解释器负责解释一行行
的Shell语句

常见shell解释器

Linux / Unix:

  • bash
  • sh
  • zsh(推荐)

windows:

  • CMD
  • PowerShell
  • WSL(推荐)

常见bash指令

文件新建

  • touch : 新建文件
  • mkdir :新建文件夹

文件删除

  • rmdir :移除文件夹
  • rm :移除文件夹
  • rm -r :递归移除
  • rm -rf :递归强制移除

文件移动

  • mv ./source/a.txt ./target :将a.txt移动到target下
  • mv -f ./source/a.txt ./target :将a.txt移动到target下并覆盖
  • mv -n ./source/a.txt ./target :将a.txt移动到target下不覆盖
  • cp ./source/a.txt ./target :将a.txt复制到target下
  • cp ./source ./target :递归复制整个文件夹

文件查看

  • cat  ./config.json: 查看文件全部内容
  • head -n 10 /xxx.log:查看文件前10行
  • tail -n 10 /xxx.log:查看文件后10行

文件编辑

  • nano
  • vi / vim

进程相关

  • ps :查看当前用户进程
  • ps -ax :查看所有进程
  • lsof -i :查看打开的网络相关的文件
  • lsof -p 2222 :查看pid = 2222的进程的打开文件
  • top :系统时时状态
  • kill 2222 :杀死pid = 2222的进程
  • kill -9 2222 :强制杀死pid = 2222的进程

(Kill命令实际上并不是在“kil”,本质是向进程发送信号。例如: kll-s SIGUSR134534实际上可以调试Nodejs应用,因为Nodejs会在收到SIGUSR1时进入调试模式。 优雅退出的原理就是监听SIGTERM信号,并递归地退出子进程:)

其他

  • man 指令 :查看某指令详细用法
  • grep : 筛选行
  • lsof -i | grep LISTEN :找到所有正在被监听的端口
  • awk :筛选列
  • docker rm $(docker ps -a  awkNR>1 {print $1J')  : 除所有的docker容器
  • chmod +x $(ls -al  awk 'NR>1 {print $9}') :为当前目录下的所有文件添加可执行权限

bash编程基础

变量

#全局变量
STR=abc
#局部变量
local STR=abc
#环境变量

PATH:指定命令的搜索路径
HOME: 指定用户的主工作目录 (即用户登陆到Linux系统中时,默认的目录)
HISTSIZE: 指保存历史命令记录的条数
LOGNAME: 指当前用户的登录名
HOSTNAME: 指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的
SHELL: 指当前用户用的是哪种
ShellLANG/LANGUGE: 和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
MAIL: 指当前用户的邮件存放目录

基础数据类型

#String
ASTRING=abc
ASTRING="abc defg"

#Number
ANUMBER=$[ 1+1 ]
ANUMBER=$(( 1+1 ))

#Array
AARRAY=(a b c d)
AARRAY=(1 2 3 4)
AARRAY[1]=0

运算

#组合

ASTRING=abcdefg
ANUMBER=$(( 1 + 1 ))
STR="The alphabet starts with $ASTRING"
echo $STR     # The alphabet starts with abcdefg
SEQ=(1 $ANUMBER 3 4 5)
echo $SEQ     #12345
#数学运算

NUM=$( 2+2 )  #4
NUM=$( 2-2 )  #0
NUM=$( 2*2 )  #4
NUM=$( 2/2 )  #1

 条件语句

#条件语句 - if then

if conditionl
then
    command1
elif condition2
then
    command2
else
    commandN
fi


#条件语句 - case

case $VAR in
    condition1)
        command1
        ;;
    condition2)
        echo command2
        ;;
    *)
        echo command3
        ;;
esac

比较符

#比较符

-Z var     #检查变量var是否为空
-d file    #检查file是否存在并是一个目录
-e file    #检查file是否存在
-f file    #检查file是否存在并是一个文件
-r file    #检查file是否存在井可读
-s file    #检查file是否存在并非空
-w file    #检查file是否存在井可写
-x file    #检查file是否存在并可执行
-O file    #检查file是否存在并属于当前用户
-G file    #检查file是否存在并其默认组与当前用户相同
filel -nt file2     #检查file1是否比file2新
filel -ot file2     #检查file1是否比file2旧

循环语句

for index in 1 2 3 4 5;do
    echo "index="$index
done

for ((i=0; i<5; i++)); do
    echo $i
done

while(( $i<=10 )) do
    echo $i
done

函数定义

#定义
function custom_echo(){
    local prefix="input is"
    if [ -z $1 ]; then
        echo "no input"
    else
        echo "$prefix $1"
    fi
    return 0
}
#在函数体中,可以使用Sn来获取第n个实参

#调用
custom echo        # unknown
custom echo abc    # input is abc
custom_echo abc    # input is abc
echo $?            #0
# $? : Shell中运行的每个命令都使用退出状态码 (exitstatus) 来告诉shell它完成了处理。退出状态码是一个0-255之间的整数值,在命令结束运行时由命令传给shell。可以在命令执行完毕后立即使用 S? 捕获

#其他特殊变量
$#          传递到脚本或函数的参数个数
$*          以一个单字符串显示所有向脚本传递的参数
$$          脚本运行的当前进程ID号
$!          后台运行的最后一个进程的ID号
s@与S*相同  但是使用时加引号,并在引号中返回每个参数
$-          显示Shell使用的当前选项,与set命令功能相同
$?          显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

重定向

command > file将输出重定向到 file
command < file将输入重定向到 file
command << file 将输入重定向到 file 的部分内容
command >> file 将输出以追加的方式重定向到 file

交互

echo            # 打印并换行
echo -n “xxx    # 打印且不换行
read var        # 读取输入,存入变量var
read -n I var   # 读取输入的第一个字符,存入变量var

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值