Shell基础知识

大哥大姐们在线讲解下,Shell基础知识
最新回答
乖我要你平安

2026-10-27 11:07:20

Shell是Linux/Unix系统中的命令行解释器,用于接收用户输入的命令并调用系统内核执行。以下是Shell基础知识的详细总结:

一、Shell概述
  • Shell类型:常见的Shell解析器包括sh、bash、nologin、dash、tcsh、csh等。其中,sh是bash的软链接,CentOS默认使用bash作为解析器。
  • Shell脚本格式:脚本开头需指定解析器,如#!/bin/bash。一个简单的输出"hello,word"的脚本示例如下:#!/bin/bashecho hello,word
  • 执行脚本的方法:

    bash 1.sh

    sh 1.sh

    source 1.sh

    ./1.sh(需先给脚本执行权限:chmod 777 1.sh)

二、Shell脚本入门
  • 多命令行例子:在指定目录下创建文件并写入内容。#!/bin/bashcd ~/shellDemoecho nihaoma? > nihao.txt
三、变量
  • 系统变量:如$PATH、$HOME等。
  • 自定义变量:

    定义:变量=值

    撤销:unset 变量

    声明静态变量:readonly 变量(不能unset)

  • 变量定义规则:

    由字母、数字和下划线组成,不能以数字开头。

    环境变量名建议大写。

    等号两侧不能有空格。

    变量值有空格时需用双引号或单引号括起。

  • 特殊变量:

    $n:表示脚本名称或参数($1-$$9,10以上用${10})。

    $#:获取所有输入参数的个数。

    $*和$@:代表命令行中所有的参数。

    $?:最后一次执行的命令的返回状态(0表示成功,非0表示失败)。

四、运算符
  • 算术运算:

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

    expr命令(运算符间要有空格):expr 2 + 3expr `expr 2 + 3` * 4

五、条件判断
  • 基本语法:[ condition ](condition前后要有空格)
  • 常用判断条件:

    整数比较:-lt(小于)、-le(小于等于)、-eq(等于)、-gt(大于)、-ge(大于等于)、-ne(不等于)

    字符串比较:=

    文件权限判断:-r(读)、-w(写)、-x(执行)

    文件类型判断:-f(文件存在且是常规文件)、-e(文件存在)、-d(文件存在且是目录)

六、流程控制
  • if语句:if [ condition ]; then # 程序fi示例:#!/bin/bashif [ $1 -eq 1 ]; then echo "你好"elif [ $1 -eq 2 ]; then echo "你不好"fi
  • case语句:case $变量名 in "值1") ;; "值2") ;; *) ;;esac示例:#!/bin/bashcase $1 in 1) echo "你好";; 2) echo "你不好";; *) echo "不知道";;esac
七、循环
  • for循环:for ((初始值; 循环控制条件; 变量变化))do # 程序done或for 变量 in 值1 值2 值3 ...do # 程序done示例(从1加到100):#!/bin/bashm=0for ((i=1; i<=100; i++))do m=$[$m+$i]doneecho $m
  • while循环:while [ condition ]do # 程序done示例:#!/bin/bashs=0i=1while [ $i -le 100 ]do s=$[$s+$i] i=$[$i+1]doneecho $s
八、读取控制台输入
  • read命令:read -p "提示语" 变量名示例:#!/bin/bashread -t 10 -p "你说啥?" Wordecho $Word
九、函数
  • 系统函数:

    basename:获取文件名。

    dirname:获取文件路径。

  • 自定义函数:[function] 函数名() { # 程序 [return int;]}示例(计算两个输入参数的和):#!/bin/bashfunction sum() { s=$[$1+$2] echo $s}read -p "input your p1:" P1read -p "input your p2:" P2sum $P1 $P2
十、Shell工具
  • cut:从文件中剪切数据。cut -d "分隔符" -f 列号 filename示例:cut -d " " -f 1 test.txt
  • sed:流编辑器,用于处理文本。sed [选项] 'command' filename示例:sed '2a 00 hj' test.txt # 在第二行后添加"00 hj"sed '/3/d' test.txt # 删除包含3的行sed 's/3/8/g' test.txt # 将所有3替换为8
  • awk:强大的文本分析工具。awk [选项] 'pattern {action}' filename示例:awk -F: '{print $1}' /etc/passwd # 打印/etc/passwd文件中以冒号分隔的第一列
  • sort:文件排序。sort [选项] filename示例:sort -n -k 2 test.txt # 按第二列数值大小排序