Shell笔记

Shell笔记

是什么?

  • shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
  • shell还是一个编程语言

解释器

  • 通过输入sudo cat /etc/shells查看电脑上的shell解释器
  • image-20221013152421473
  • 可以看到我电脑上有7种shell解释器,其中bashsh是较为常用的。
  • 输入echo $SHELL查看系统默认shell解释器
  • image-20221013154702439
  • 因为我是mac系统,所以默认解释器是zsh,linux系统默认解释器是bash

脚本

脚本格式

  • #!/bin/bash开头(指定解释器)

如何执行脚本

  • sh file_path
    通过sh来执行脚本
    
    bash file_path
    通过bash来执行脚本
    
    file_path
    通过自己来执行脚本(需要有权限,可通过语句“chmod 777 file_path”来获得权限)
    

多命令操作

  • 需求:在脚本地址的上一级创建一个txt文件,写入I am talent这句话。

  • #!/bin/bash
    
    cd ..
    touch test.txt
    echo "I am talent" >> test.txt
    

变量

常用系统变量

  • $HOME, $PWD, $SHELL, $USER
  • image-20221013161627869

自定义变量

  • 同python定义变量:变量=值

    • 例如:a=1(等号两边不能有空格)
  • 撤销变量:unset 变量

  • 定义静态变量(不能撤销):readonly 变量

  • 将变量提升为全局变量,可供其他Shell脚本调用:export 变量

注意事项

  • 变量名可以由字母、数字、下划线组成,但是不能以数字开头。环境变量建议大写
  • 等号两侧不能有空格
  • 变量默认均为字符串类型,不能直接数值运算
  • 变量的值若有空格,需用引号括起来

特殊变量 $n

  • 语法:$n
  • n为数字,0代表该脚本名称,1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
  • parameter.sh文件
    • image-20221013164626283
  • image-20221013164800718

特殊变量 $#

  • 语法:$#
  • 获取输入变量的个数,常用于循环
  • image-20221013165418836
  • image-20221013165442589

特殊变量 $* $@

  • $*:该变量代表命令行中所有的参数,把所有参数看成一个整体
  • $@:同上,但是把每个参数区分对待
  • image-20221013165834327
  • image-20221013165819323

特殊变量 $?

  • $?:记录上一次命令是否正确执行,0表示正确执行了,非0表示执行失败
  • image-20221013170212261
  • image-20221013170224786

运算符

基本语法

  • $((运算式))$[运算式]
  • expr +,-,\*,/,% 加减乘除取余(运算符之间要有空格)

例子

  • expr方法
    • 计算3+2
    • image-20221013170850679
    • 计算(3+2)*4
    • image-20221013170918120
  • $[]方法
    • 计算3+2
    • image-20221013171051598
    • 计算(3+2)*4
    • image-20221013171101902

条件判断

基本语法

  • [ 条件 ]
  • 中括号内的左右两侧必须有一个空格
  • 只要[]内有条件,则返回true,否则返回false

常用判断条件

  • 两个整数之间的比较
    -lt小于-le小于等于
    -eq等于-gt大于
    -ge大于等于-ne不等于
  • 文件权限判断
    -r可读-w可写
    -x可执行
  • 文件类型判断
    -f文件存在且常规文件-e文件存在
    -d文件存在且是目录

例子

  • 检查文件test.sh是否具有写权限

[ -w test.sh ]
echo $?
0
  • 多条件判断(&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败,才执行下一条命令)

  • [ condition ] && echo OK || echo notek
    OK
    
    [ condition ] && [  ] || echo notek
    notek
    

流程控制

if 判断

基本语法
  • if [ condition ];then
    	code
    fi
    
  • if [ condition ]
    	then
    		code
    fi
    
例子
  • image-20221015154643661

case 语句

基本语法
  • case $变量名 in
    	"值1")
    		code1
    		;;
    	"值2")
    		code2
    		;;
    	*)
    		code3
    		;;
    esac
    
注意事项
  • “;;”相当于break
  • “*”相当于default
例子
  • image-20221015155537268

for 循环

基本语法
  • for ((初始值;循环控制条件;变量变化))
    	do
    		code
    	done
    
  • for 变量 in 值1 值2 值3 ...
    	do
    		code
      done
    
例子
  • image-20221015160302073
  • image-20221015162128041

while 循环

基本语法
  • while [ 条件判断式 ]
    	do
    		code
    	done
    
例子
  • image-20221015164833579

read读取控制台输入

基本语法

  • read 选项 参数
  • 选项:
    • -p:指定读取值时的提示符
    • -t:指定读取值时等待的时间(秒)
  • 参数
    • 变量:指定读取值所存放的变量名

例子

  • image-20221015165722778

函数

系统函数

basename基本语法
  • basename [string/pathname] [suffix]
  • 该命令会删除掉所有前缀包括最后一个‘/’字符,然后显示字符串
  • suffix为后缀,若指定了,则会在显示字符串中的suffix给删除
  • image-20221015170527941
dirname基本语法
  • dirname 文件绝对路径
  • 该命令会从给定的绝对路径中删除文件名(非目录部分),返回剩下路径
  • image-20221015170809122

自定义函数

基本语法
  • function 函数名()
    {
    	code
    }
    
例子
  • image-20221015172122739

工具

cut

sed

awk

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值