当前位置: 首页 > news >正文

常用shell命令

文章目录

  • Shell脚本基础教程
    • 一、基础操作
      • 1. 执行脚本
      • 变量操作
      • for 循环
      • while 循环
      • 常用命令工具
        • grep 命令
        • 管道符
      • 输入输出
        • 重定向操作
        • read 命令
      • 条件判断
      • 数组
      • 函数定义
      • 字符串
      • 注释与多行命令
      • 后台执行

Shell脚本基础教程

一、基础操作

1. 执行脚本

chmod +x ./test.sh  # 添加执行权限
./test.sh           # 执行脚本

变量操作

定义变量:
myName = "li"

使用变量:
echo $myName

删除变量:
unset myName

$0  脚本名称
$n  传入参数
$@  命令行所有的参数, 每个参数区分对待
$*  命令行所有的参数,每个参数看成一个整体
$?  最后执行命令的状态,为0正确,不为0,错误
$$  当前进程的id
$!  后台运行的醉胡一个线程的pid

for 循环

# $* 作为整体处理
for i in "$*"; do
    echo $i  # 输出: "1 2 3"
done

# $@ 作为独立参数
for i in "$@"; do
    echo $i  # 输出: 1\n2\n3
done

while 循环

count=0
while [ $count -lt 5 ]; do
    echo $count
    ((count++))
done

常用命令工具

grep 命令
# 查找包含"user"的行(不区分大小写)
grep -i "user" /etc/passwd

# 显示匹配行的行号
grep -n "root" /etc/passwd
管道符
# 分页显示目录内容
ls -l /etc | more

# 统计文件数量
ls -l | grep "^-" | wc -l

输入输出

重定向操作
# 输出重定向
echo "Hello" > output.txt  # 覆盖写入
echo "World" >> output.txt # 追加写入

# 输入重定向
wc -l < output.txt  # 统计行数
read 命令
# 带超时的输入
read -t 30 -p "请输入姓名: " name
echo "你好,$name"

条件判断

if [ $a -eq $b ]; then
    echo "相等"
elif [ $a -gt $b ]; then
    echo "a更大"
else
    echo "b更大"
fi

case $choice in
    1) echo "选项1" ;;
    2|3) echo "选项2或3" ;;
    *) echo "无效选项" ;;
esac

数组

# 定义数组
array=("apple" "banana" "orange")

# 遍历数组
for fruit in "${array[@]}"; do
    echo $fruit
done

# 获取数组长度
echo ${#array[@]}  # 输出: 3

函数定义

# 带参数的函数
sum() {
    echo $(( $1 + $2 ))
}

# 调用函数
result=$(sum 5 3)
echo $result  # 输出: 8

字符串

str="Hello World"

# 字符串长度
echo ${#str}  # 输出: 11

# 子串截取
echo ${str:0:5}  # 输出: Hello
echo ${str:6}   # 输出: World

注释与多行命令

# 单行注释
: '
多行注释
可以写任意内容
'

# 多行命令
command1 && \
command2 || \
command3

后台执行

# 后台运行脚本
./long-running.sh &

# 获取后台进程ID
echo $!  # 输出最后一个后台进程PID

相关文章:

  • NodeTextFileCollectorScrapeError 报警原因及解决方法
  • Linux中的权限管理(附加详细实验示例)
  • swe-bench环境安装踩坑
  • 如何利用 AI 进行 A/B 测试的优化?
  • 【设计模式】过滤器模式
  • 手机显示5GA图标的条件
  • Oracle中文一二三四排序【失败】
  • Linux防火墙的iptables命令示例与详细解释
  • deepseek v3-0324实现数学方程式绘制曲线功能
  • Redis-14.在Java中操作Redis-Spring Data Redis使用方式-操作列表类型的数据
  • 西门子TCP通讯过程中硬件连接突然断开
  • 轻帆云智能ITSM应用最佳实践,助力IT共享服务中心高效运营
  • Redis:集群
  • 广告推荐算法:COSMO算法与A9算法的对比
  • 如何让AI帮你做用户运营:用户消费偏好分层和洞察
  • Java之JDBC数据库连接技术
  • git 操作记录
  • 多账号安全登录与浏览器指纹管理的实现方案
  • 基于AvgPool与自编码器的语音识别
  • 去中心化自治组织(DAO):革新未来治理的下一站
  • 北京亦庄启动青年人才创新创业生态示范区
  • 举牌超200轮!中铁建7.76亿元竞得北京通州梨园宅地
  • 五月院线片单:就看五一档表现了
  • 西班牙遭遇史上最严重停电,已进入国家紧急状态
  • 上海通报5起违反中央八项规定精神问题
  • 江西省国资委原副主任李键主动向组织交代问题,接受审查调查