Shell脚本笔记

1.查看linux可用的shell
cat /etc/shells

2.查看linux默认的shell
echo $SHELL

echo是一个shell命令
SHELL是shell的环境变量

3.shell提示符
普通用户
base shell提示是$符号
超级用户(root)
base shell提示是#符号

[root@1fce913333e2 ~]
root 当前用户
1fce913333e2 当前主机名称
~ 当前目录

Shell 通过PS1和PS2两个环境变量来控制提示符格式:
PS1 控制最外层命令行的提示符格式。
PS2 控制第二层命令行的提示符格式。

echo $PS1 :
[\u@\h \W]$
\u 当前用户
\h 当前主机名称
\W 当前目录

PS2 是命令行提示符
echo "asd

asd
asd
"
以上情况,在一行命令没有输入完成情况下的提示符

4.第一个shell脚本
#!/bin/bash --> #!约定标记,告诉系统该脚本需要什么解释器来执行 /bin/bash 具体解释器位置
echo “Hello World !” #这是一条语句

echo (Standard Output, stdout,一般指终端) :向标准文件输出文本
read (Standard Input, stdin) : 从标准输入文件读取用户输入的数据

#!/bin/bash

echo “What is your name?”
read PERSON
echo “Hello, $PERSON”

5.执行脚本
chmod +x test.sh
给test.sh文件加可执行权限

. ./test.sh -->执行没有执行权限的脚本文件

source test.sh -->使用source执行test.sh文件

作为解释器参数执行脚本:
/bin/bash test.sh

6.Shell变量
shell定义变量不需要指定类型,直接赋值就可以
bash shell中,每一个变量都是字符串,没有使用引号,值也会被当作字符串存储

variable_name=value
若value中不包含空格或者tab那么不需要加引号,否则一定要加引号
赋值=符号两边不能有空格

使用变量:
$variable_name
${variable_name} -->{}可选的,推荐的

单引号’’ 与双引号""区别:
单引号:里面的内容原样输出
双引号: 先解析里面的变量和命令,在输出

将命令的结果赋值给变量(两种方式):
variable=command
variable=$(command)

只读变量:
readonly -->使用readonly修饰的变量不可以修改
name=“lifeng”
readonly name

删除变量:
unset variable_name

7.shell变量的作用域(Scope)
Shell 变量的作用域可以分为三种:
有的变量可以在当前 Shell 会话中使用,这叫做全局变量(global variable);
有的变量只能在函数内部使用,这叫做局部变量(local variable);
而有的变量还可以在其它 Shell 中使用,这叫做环境变量(environment variable)。

全局变量:
所谓全局变量,就是在整个shell会话中都有效。每个shell会话都有自己的作用域,彼此互不影响。在shell中默认是全局变量

局部变量:
定义在自定义函数内的变量,在函数外部也能访问到,若想要变量作用于仅仅在函数内部,只需要在变量前加local

function func(){
local a=99
}

环境变量:
全局变量只在当前 Shell 会话中有效,如果使用export命令将它导出,那么它就在所有的子 Shell 中也有效了,这称为“环境变量”
#定义一个全局变量a
a=22
echo $a
#进入子shell
bash
echo $a -->输出a失败
exit -->退出子shell
export a -->导出a,使得a为环境变量
#再一次进入子shell
bash
echo $a -->输出22

8.shell位置参数(命令行参数)
运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收

  1. 给脚本文件传递位置参数
    #!bin/bash
    echo $1
    echo $2
    ./test.sh a b

  2. 给函数传递位置参数
    function sayHello() {
    echo “hello, $1”
    }

sayHello lifeng

9.特殊变量
$0 :当前脚本名称
$n :传递给脚本或函数的参数,n表示第几个参数
$# :传递给脚本或函数的参数个数
$* :传递给脚本或函数的所有参数
@ : 传 递 给 脚 本 或 函 数 的 所 有 参 数 。 当 被 双 引 号 " " 包 含 时 , @ :传递给脚本或函数的所有参数。当被双引号" "包含时, @:""@ 与 $* 稍有不同, $*会将所有参数整体上看做一份数据, $@而是把每个参数看做一份数据
$? :上个命令的退出状态,或者函数的返回值
$$ :当前shell进程ID

10.shell命令替换:将命名的输出结果赋值给变量
两种方式命令替换:
`` :反引号
$()

例子:
date1=date
date2=$(date)
echo $date1
echo $date2

LSL=ls -l
echo KaTeX parse error: Expected 'EOF', got '#' at position 6: LSL #̲不使用双引号包围,若命令输出的…LSL" #使用引号包围

要注意的是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用

11.shell字符串详解

字符串可以由单引号’ '包围,也可以由双引号" "包围,也可以不用引号

下面我们说一下三种形式的区别:

  1. 由单引号’ '包围的字符串:
    任何字符都会原样输出,在其中使用变量是无效的。
    字符串中不能出现单引号,即使对单引号进行转义也不行。

  2. 由双引号" "包围的字符串:
    如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
    字符串中可以出现双引号,只要它被转义了就行。

  3. 不被引号包围的字符串
    不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
    字符串中不能出现空格,否则空格后边的会作为其他变量或者字符串解析。

获取字符串长度:
${#string_name}

12.shell字符串拼接与截取
在shell中只需要将两个字符串并排放在一起就能实现拼接
name=“lifeng”
age=“20”
echo n a m e name nameage

Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取

  1. 从字符串左边开始计数
    ${string: start :length}

  2. 从右边开始计数
    ${string: 0-start :length}

从指定字符(子字符串)开始截取

  1. 使用 # 号截取右边字符
    ${string#*chars}

  2. 使用 % 截取左边字符
    ${string%chars*}

13.shell数组
bash shell只支持一维数组,不支持多维数组
在shell中,用()表示数组,数组元素之间用空格分隔
arr_name=(a b c d e)
数组中元素类型可以不相同

获取数组中的元素:

获取数组中下标为index的元素
${arr_name[index]}

获取数组中所有元素:
${arr_name[@]}
${arr_name[*]}

使用#获取数组长度
${#arr_name[*]}
${#arr_name[@]}

数组拼接合并:
arr_new=(${arr1[@]} ${arr2[*]})

删除数组元素
unset arr_new[1]

14.shell内建命令
所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。
使用type测试一个命令是否是内建命令:
[root@1fce913333e2 ~]# type cd
cd is a shell builtin
[root@1fce913333e2 ~]# type ifconfig
ifconfig is /sbin/ifconfig

15.Shell alias:给命令创建别名
16.Shell echo命令:输出字符串
17.Shell exit命令:退出Shell
18.Shell ulimit命令:显示并设置进程资源限度

以下启动方式:

. ./a.sh
source a.sh
相当于在命令行输入命令,结束后会到相应目录下

给a.sh赋可执行权限
./a.sh 相当于重新开一个进程,不会影响当前命令行

举个例子
a.sh脚本内容如下:

cd /opt/tomcat/bin
./startup.sh

如果使用

source a.sh
或
. ./a.sh
方式启动脚本,脚本结束后,命令行会切换到/opt/tocmat/bin目录下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值