shell(学习笔记一)

本文介绍了Shell脚本的基础知识,包括bash的特点、执行脚本的方式、变量类型与操作、字符串处理、数组使用,以及read命令和基本运算。通过学习,读者能够掌握编写和执行Shell脚本的基本技能,并了解如何进行标准输入输出重定向、命令别名和多行注释。此外,还探讨了环境变量、位置变量和预定义变量在脚本中的应用。
摘要由CSDN通过智能技术生成

shell介绍

shell :用户与Linux内核之间的解释器(将用户指令翻译成内核可识别的指令)

应用程序
命令解释器
操作系统内核
计算机硬件

查看系统默认的shell解释器: echo $SHELL
在这里插入图片描述
查看系统支持的shell解释器: cat /etc/shells
在这里插入图片描述
可以通过usermod、chsh更改不同用户使用的shell解释器(root权限下)
usermod -s /bin/sh username
chsh-s /bin/sh username

grep username /ect/passwd查看用户所使用的解释器

bash特性

一般默认使用的shell解释器是bash

  • 快捷键 (可参考 常用的Linux shell快捷键

  • 命令历史(history)

  • 命令别名(alias)

  • 标准输入输出重定向(>、>>、2>、2>>、&>)

  • 管道(|):组合多条命令如 apt list | grep bash

     >: 重定向		 `ls > a.txt`没有该文件时创建文件  适用于正确的信息
     	使用>都会覆盖文件
     >>:追加重定向(只追加不覆盖)	 `ls >> a.txt`该文件必须已存在
     2>: 适用于错误信息
     &>: 适用于所有正确错误信息
    

执行shell脚本的方法

shell脚本:提前将可执行的命令语句写入一个文件。

  1. 作为解释器参数 bash / sh + filename.sh:
    bash test.sh
    sh test.sh

    这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。 
    若使用`suorce 脚本名.sh`则不会启动子进程,可通过pstree查看进程树。
    

    下图第一个用bash,第二个用source

  2. 作为可执行程序 ./filename.sh
    需要添加执行权限 chmod +x test.sh
    然后 ./test.sh

每个程序都有自己对应的解释器,若用./执行,最好在文件中指明解释器:
1.文件首行添加 #!/bin/bash
2.添加执行权限 chmod +x test.sh 
3.然后再 ./test.sh

变量

  1. 全局变量:在当前shell及子shell中有效,定义全局变量使用export
  2. 局部变量:只在当前shell环境中有效

变量类型

  • 环境变量(系统)
  • 位置变量(bash内置,存储脚本执行时的参数)
  • 预定义变量(bash内置,可以调用但是不能赋值或修改)
  • 自定义变量(用户定义)

自定义变量
定义变量:变量名=变量值
取消变量:unset 变量名脚本执行完会自动回收变量,所以脚本中不需要unset

注意:变量名和等号之间不能有空格
	 不能使用关键字
	 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头

查看变量:$变量名${变量名} 加花括号是为了帮助解释器识别变量的边界
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。

环境变量
存储在/etc/profile或~/bash_profile
列出所有环境变量:env
常见环境变量:PATH、PWD、USER、UID、HOME、SHELL

  • PATH:搜索命令路径
  • PWD:当前路径
  • USER:当前用户名
  • UID:当前用户ID号
  • HOME:家目录

位置变量
存储脚本执行时的参数,即命令行传参,类似于C的argc、argv
使用$n表示,例如$1...${10}...

预定义变量
保存脚本程序的执行信息,可以直接使用但不能赋值

$0:当前所在的进程或脚本名
$$:当前运行进程的PID号
$?:命令执行后的返回状态
$#:已加载位置变量的个数,即传递到脚本的参数个数
$*:所有位置变量的值,即 以一个单字符串显示所有向脚本传递的参数。

$* 与 $@ 区别:

相同点:都是显示所有向脚本传递的参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)

引号

双引号" ":可以有变量和转义字符
单引号’ ':字符原样输出,变量无效
反引号 :将命令的执行输出作为变量值,$()与反引号等效
在这里插入图片描述
在这里插入图片描述

字符串

获取字符串的长度
echo ${#str}

提取子字符串
echo ${str:1:4}

查找子字符串
echo `expr index "$x" a`

shell数组

bash支持一维数组(不支持多维数组),不限定数组大小。
array=(1 2 3)
输入${array[0]} 输出1

读取数组:${数组名[下标]}
获取数组中的所有元素:echo ${array[@]}

取得数组元素的个数:echo ${#array[@]}echo ${#array[*]}
获取数组单个元素的长度:echo ${#array[n]}

read标准输入取值

read [-p "提示信息" -t 指定超时秒数 -s(设置是否在终端显示输入的内容)] 变量名
作用:从键盘读取值
-p示例

基本运算

$[]或$(())或用let命令支持简写
在这里插入图片描述 在这里插入图片描述

bash不支持小数运算,可以通过计算器软件bc实现小数运算(scale可指定小数位数),bc也支持比较运算操作
也可用expr进行多种运算

交互式bc运算
在这里插入图片描述
非交互式bc运算(管道传递)
在这里插入图片描述
expr运算

echo `expr 2 + 2`

表达式和运算符之间要有空格
完整的表达式要被反引号包含

多行注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

或(EOF可用其他符号代替’、!)

学习来源:【2021版】Shell脚本从入门到精通以及菜鸟教程
目录跳转
shell(学习笔记二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值