shell脚本基础

1、shell脚本执行

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

脚本在线运行

菜鸟教程在线编辑器 (runoob.com)

#!/bin/bash
echo "Hello World !"

运行脚本的方法:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注释脚本:EOF/!都可以

#!/bin/bash
:<<EOF
echo "Hello World !"
EOF

2、变量

2.1变量定义

没有空格

#!/bin/bash
your_name="runoob"

2.2使用变量

使用变量要加$

#!/bin/bash
your_name="runoob"
echo $your_name
echo ${your_name}
echo "my name is ${your_name}"

在这里插入图片描述
变量可以二次赋值:

#!/bin/bash
your_name="runoob"
echo $your_name
your_name="ava"
echo ${your_name}

2.2只读变量、删除变量

readonly 只读变量,无法修改变量的值

#!/bin/bash

myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"

在这里插入图片描述
unset 删除变量

#!/bin/bash
myUrl="ava"
unset myUrl
echo $myUrl

无输出

2.2变量分类

字符串变量、整数变量、数组变量、环境变量、特殊变量。

字符串变量:

可以使用单引号 ’ 或双引号 " 来定义字符串。
获取字符串长度:变量为字符串时,${#string} 等价于 ${#string[0]}:
提取字符串:echo s t r i n g : 1 : 4 查找字符 i 或 o 的位置 ( 哪个字母先出现就计算哪个 ) : e c h o ‘ e x p r i n d e x " {string:1:4} 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):echo `expr index " string:1:4查找字符io的位置(哪个字母先出现就计算哪个)echoexprindex"string" io` # 输出 4

#!/bin/bash
str1="ava"
str2="love"
name="wang"
res="${str1} ${str2} you ,\"${name}\"!" #\转义
echo $res
echo ${#res}
echo ${res:1:4}
echo `expr index "$res" io`

在这里插入图片描述

整数变量:

可以使用 declare 或 typeset 命令来声明整数变量。

#!/bin/bash
declare -i num=42;
echo $num;
数组变量:

数组可以是整数索引数组或关联数组。

#!/bin/bash
nums=(1 2 3 4 5)
declare -A asso_nums
asso_nums["name"]="Jhon"
asso_nums["age"]=30 
echo ${nums[0]}
echo ${nums[@]}
echo "nums size:${#nums[@]}"
echo "sigel nums size:${#nums[1]}"

echo ${asso_nums[@]}
echo "asso_nums size:${#asso_nums[@]}"
echo "数组的键为: ${!asso_nums[@]}"

在这里插入图片描述

环境变量:

这些是由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境。

1,Shell编程常见系统变量如下:

(1)$0:当前脚本的名称。
(2)$n:当前脚本的第n个参数,n=1,2,…,9。
(3)$∗:当前脚本的所有参数(不包括程序本身)。(单字符串传递)
(4)$#:当前脚本的参数个数(不包括程序本身)。
(5)$?:命令或程序执行完后的状态,返回0表示执行成功。
(6)$$:程序本身的PID号。
(7)$!:后台运行的最后一个进程的ID号

特别注意!:$ 与 $@ 区别:*
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

#!/bin/bash
nums=(1 2 3 4 5)
echo ${nums[*]}
echo ${nums[@]}

#当用*传递的时候,是直接传入了整个数组(用一个参数表示),所以只获取参数1就行了
function showArr(){
	arr=$1
	for i in ${arr[*]};do
		echo $i
	done
}

#当用@传入的时候,多个参数传入,所以可以获取到全部参数以后再遍历
function showArr1(){
	arr=$* 
	for i in ${arr[*]};do
		echo $i
	done
}

#整个数组以一个参数传入
showArr "${nums[*]}"
#整个数组传递多个参数
showArr1 "${nums[@]}"

在这里插入图片描述

不知道观察到没有,这里的数组传入的时候已经变形了,没有原来的下标了,比较坑。
**将数组作为参数传递给函数时,实际上是将数组元素转换成了字符串形式,并将它们作为命令行参数传递给函数。这意味着,数组的索引信息丢失了,数组元素不能再作为数组来访问和修改。**所以如果要对这个数组做操作的时候,需要重新给索引下标。

2,Shell编程常见环境变量如下:

(1)PATH:命令所示路径,以冒号为分割。
(2)HOME:打印用户家目录。
(3)SHELL:显示当前shell类型。
(4)USER:打印当前用户名。
(5)ID:打印当前用户ID信息。
(6)PWD:显示当前所在路径。
(7)TERM:打印当前终端类型。
(8)HOSTNAME:显示当前主机名。

特殊变量:

有一些特殊变量在 Shell 中具有特殊含义,例如 $0 表示脚本的名称,$1, 2 , 等表示脚本的参数。 2, 等表示脚本的参数。 2,等表示脚本的参数。#表示传递给脚本的参数数量,$? 表示上一个命令的退出状态等。

2、Shell

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值