Shell是Linux/Unix系统中的命令行解释器,用于接收用户输入的命令并调用系统内核执行。以下是Shell基础知识的详细总结:
一、Shell概述二、Shell脚本入门- 多命令行例子:在指定目录下创建文件并写入内容。#!/bin/bashcd ~/shellDemoecho nihaoma? > nihao.txt
三、变量- 系统变量:如$PATH、$HOME等。
- 自定义变量:
定义:变量=值
撤销:unset 变量
声明静态变量:readonly 变量(不能unset)
- 变量定义规则:
由字母、数字和下划线组成,不能以数字开头。
环境变量名建议大写。
等号两侧不能有空格。
变量值有空格时需用双引号或单引号括起。
- 特殊变量:
$n:表示脚本名称或参数($1-$$9,10以上用${10})。
$#:获取所有输入参数的个数。
$*和$@:代表命令行中所有的参数。
$?:最后一次执行的命令的返回状态(0表示成功,非0表示失败)。
四、运算符五、条件判断- 基本语法:[ 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 # 按第二列数值大小排序