Shell概述、变量、数组

1.shell概述

shell介于内核与用户之间,负责命令的解释,/bin/bash 是大多数Linux默认的shell,几乎包含了shell的所有功能。

shell脚本就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。

1)脚本第一行,#!指定解释器 #!/bin/bash 表示使用bash解释器解析

2)脚本第二部分,注释(#号)说明,对脚本的基本信息进行描述

3)脚本第三部分,脚本要实现的具体代码内容

#shell脚本的执行方式
[root@myhost shell01]# /shell01/first_shell.sh
[root@myhost shell01]# ./first_shell.sh

双引号"" :会把引号的内容当成整体来看待,允许通过$符号引用其他变量值

单引号'' :会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符

反撇号`` :反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用

[root@myhost dir1]# echo "$(hostname)" 
myhost  
[root@myhost dir1]# echo '$(hostname)' 
$(hostname) 
[root@myhost dir1]# echo $(date +%Y)
2023
[root@myhost dir1]# echo `echo $(date +%Y)` 
2023
[root@myhost dir1]# echo `date +%Y` 
2023
[root@myhost dir1]# echo `echo `date +%Y`` 
date +%Y 
[root@myhost dir1]# echo $(echo `date +%Y`) 
2023

-e 开启转义 \n:换行 \c:不换行

2.变量
定义规则

1.区分大小写

2.不能有特殊符号

3.不能以数字开头

4.等号两边不能有任何空格

定义方式

1.直接赋值

2.命令的执行结果赋值

3.交互是定义变量(read)

-p 定义提示用户的信息; -n 定义字符数;

-s 不显示内容 ; -t 定义超时时间;

4.定义有类型的变量

-i 将变量看成整数; -r 只读变量;

-a 普通数组; -A 关联数组; -x 将变量通过环境导出;

[root@myhost ~]# A=1234567 
[root@myhost ~]# B=`date +%Y` 
[root@myhost ~]# read -p "Input your name:" name 
[root@myhost ~]# declare -i A=123 
变量分类

本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

环境变量:当前进程有效,并且能够被子进程调用。

全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用。

系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用。

$? 上一条命令执行后返回的状态;0表示正常;

$0 当前执行的程序或脚本名;

$# 脚本参数的个数;

$* 脚本的所有参数,作为一个整体输出;

$@ 脚本的所有参数,相互独立输出;

$1~$9 / ${10}~${n} 脚本后面的位置参数;

$$ 当前进程的进程号

3.简单的四则运算

运算表达式: $(( )) $[ ] expr let

echo $((1+2))
echo $[3-1]
expr 10/5
let n+=1  等价于   let n=n+1
4.数组

普通数组:只能使用整数作为数组索引(元素的下标)

一次赋予一个值:array[0]=v1 array[1]=v2

一次赋予多个值:array=(v1 v2 v3)

array1=(`cat /etc/passwd`) #将文件中每一行赋值给array1数组 
array2=(`ls /home/tom`) 
array3=(harry amy jack "jerry") 
array4=(1 2 3 4 "hello world" [10]=linux)

数组的读取:

${array[0]} 获取数组里第一个元素 
${array[*]} 获取数组里的所有元素 
${#array[*]} 获取数组里所有元素个数 
${!array[@]} 获取数组元素的索引下标 
${array[@]:1:2} 访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素 

declare -a 查看普通数组信息;

关联数组:可以使用字符串作为数组索引(元素的下标)

关联数组定义时先声明再赋值

declare -A array1

一次赋一个值: array1[linux]=one

一次赋多个值:array2=([name1]=harry [name2]=jack [name3]=amy [name4]="jack")

declare -A 查看关联数组信息;

5.其他变量定义

取出一个目录下的目录和文件:dirname和basename

a=/root/Desktop/shell/mem.
dirname $a
# /root/Desktop/shell
basename $a
# mem.txt

变量内容的删除

一个“%”代表从右往左去掉一个/key/ 两个“%%”代表从右往左最大去掉/key/

一个“#”代表从左往右去掉一个/key/ 两个“##”代表从左往右最大去掉/key/

替换:/:替换一个 //:替换全部

echo ${a/str1/str2} echo ${a//str1/str2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特亿安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值