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

零基础 学习Linux shell编程语法

1. shell简述

Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种 就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#!/bin/bash

2.shell格式

#!/bin/sh
#comments     注解
Your commands go here   命令写在这

3.一些常用的逻辑运算符

&&    #逻辑的 AND 的意思
||    #逻辑的 OR 的意思
==    #等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串  与 == 是等价的
!=    #不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
<     #小于 应用于:整型比较 在[] 中,不能使用 表示字符串
>     #大于 应用于:整型比较 在[] 中,不能使用 表示字符串
-eq   #等于 应用于:整型比较
-ne   #不等于 应用于:整型比较
-lt   #小于 应用于:整型比较
-gt   #大于 应用于:整型比较
-le   #小于或等于 应用于:整型比较
-ge   #大于或等于 应用于:整型比较
-a    #双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o    #单方成立(or) 逻辑表达式 –o 逻辑表达式
-z    #空字符串
-n    #非空字符串

4.HELLO WORLD

#!/bin/sh
#print hello world in the console window
a="hello world"
echo $a
 

注意变量 第3行 等号号 2边 不能有空格

Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。

 格式:

variable_name = variable_value

如果对一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加$,$variable_name可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号来区分,例如:

echo "Hi, $as"

就不会输出“Hi, hello worlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:

echo "Hi, ${a}s"

单引号中的变量不会进行变量替换操作。(这和PHP语法是一致的)

为了证明SHELL也是弱类型语言,我们做了如下实验

a='123'
b=123
if [ "$a" -eq $b ]
thenecho 'hehe'
fi

这里是依然有输出的 hehe

5.常用的小例子

5.1 if ... else 语句
语法:
if [ expression ]
thenStatement(s) to be executed if expression is true
fi
如果 expression 返回 true,then 后边的语句将会被执行;如果返回 false,不会执行任何语句。
最后必须以 fi 来结尾闭合 if,fi 就是 if 倒过来拼写,后面也会遇见。
注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误。
a=10;
b=10
if [ $a == $b ]
thenecho 'haha!'
fi
if ... else ... fi 语句
a=10
b=20
if [ $a == $b ]
thenecho "a is equal to b"
elseecho "a is not equal to b"
fi
使用2个表达式的if
a=1
b=2
if [ $a==1 ]  && [ $b==2 ]
thenecho 'suc'
elseecho 'fail'
fi

逻辑判断

[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。

[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。

[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。

[ ] || [ ] 用OR来合并两个条件

[ ] && [ ] 用AND来合并两个条件

5.2 while循环语句
语法:
COUNTER=0
while [ $COUNTER -lt 5 ]
doCOUNTER=`expr $COUNTER + 1`echo $COUNTER
done
expr 中运算符号和参数之间要有空格分开 
5.3 函数的运用

date的用法

date 用法: date [OPTION]... [+FORMAT]

time=`date +%Y-%m-%d`
echo $time

read的用法

#read 用来读取屏幕输入或是读取文件内容

#!/bin/sh
#print hello world in the console window
NAME=''
echo “Input file name:”
read NAME
echo 'your input file is:'$NAME

高级点的用法:

#!/bin/sh
FILENAME=
echo “Input file name:”
read FILENAME
if [ -c "$FILENAME" ]
then
cp $FILENAME /dev
fi 

-exec的用法

对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格

例子1:

找出距此时2天之内创建的文件,同时基于find的结果,应用-exec之后的命令,即ls -l,从而可以直接显示出find找到文件的明显列表

find . -ctime -2 -exec ls -l {} \;

例子2:

找出所有以.log结尾的文件,并删除

find . -name "*.log" -mtime -1 -exec rm -f {} \; //修改时间在一天内的

目录一定要选对哦,不然后果很严重哦,哈哈哈! 最好如果不确定的话就用rm -i吧

find . -name "*.log" -mtime -1 -type f   -exec rm -f {} \;

上面那个也可能找到目录去删,所以加上type -f ,意思是 只匹配普通文件的 什么log文件啊,jpg图片啊,shell文件都属于这类

 
xargs的用法

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用

find /etc -name "*.conf" | xargs ls –l    #找到etc下的conf结尾文件 并列出
find / -name "*.jpg" -type f -print | xargs tar -zcvf images.tar.gz     #查找所有的jpg 文件,并且压缩它

find的用法

find . –mtime +n:
最后一次修改发生在n+1天以前,距离当前时间为(n+1)*24小时或者更早find . –mtime –n:
最后一次修改发生在n天以内,距离当前时间为n*24小时以内find . -ctime -n //查找最后创建时间在n天内

注意这里的 +n和-n ,+n经常用到删除一些 没用的文件。比如下面用到的删除超过30天就删除

find . –mtime +30

fidn的文件类型:

-type    b/d/c/p/l/f         #依次是块设备、目录、字符设备、管道、符号链接、普通文件

相关文章:

  • 机器学习 | 基于回归模型的交通需求预测案例分析及代码示例
  • 【工具】scMultiMap基于单细胞多模态数据实现增强子与靶基因的细胞类型特异性映射
  • 基于STM32、HAL库的TSC2046IPWR触摸屏控制器驱动程序设计
  • 【同局域网/内网环境 Windows 远程桌面连接】
  • 动手学深度学习11.10. Adam算法-笔记练习(PyTorch)
  • Pacman-Multi-Agent Search
  • 深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
  • AiCube 试用 - ADC 水位监测系统
  • 如何培养团队的责任感与归属感
  • 多节点同步协同电磁频谱监测任务分配方法简要介绍
  • 【vue3】购物车实战:从状态管理到用户体验的全流程实现
  • 测量电机的电阻、电感、磁链常数和极对数办法
  • Go语言之路————指针、结构体、方法
  • Python 基础核心知识
  • (done) 吴恩达版提示词工程 6. 转换 (翻译,通用翻译,语气风格变换,文本格式转换,拼写检查和语法检查)
  • javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
  • 2025-4-25 情绪周期视角复盘(mini)
  • view、reshape、resize 的区别
  • 简单的 shell 程序
  • 前端-介绍一个好用的波浪背景生成器
  • A股三大股指收跌:地产股领跌,银行股再度走强
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞
  • 点燃“文化活火”,上海百年街区创新讲述“文化三地”故事
  • 涨价应对关税变化是短期之策,跨境电商塑造新品牌开辟“新蓝海”
  • 伤者升至80人,伊朗港口爆炸源头或为“危险品和化学品仓库”
  • 美联储报告披露关税战冲击波:消费信心下降,经济担忧加深