【Shell】Shell基础学习

一、shell脚本

(1)第一个shell脚本

#!/bin/bash   
#this is a comment
echo "hello world"

一个shell脚本永远以“#!”开头,这是一个脚本开始的标记,它是告诉系统执行这个文件需要用某个解释器,后面的/bin/bash就是指明解释器的具体位置。

“#”开头是注释

(2)脚本运行方式

①直接bash一个文件指明使用bash shell来解释脚本。

 bash test.sh

②给脚本加执行权限,‘’./ “执行脚本

 chmod +x test.sh
 ./test.sh

如果希望将一个脚本设置成默认系统命令,只需将该脚本复制到系统$PATH变量所在的目录中,同时赋予可执行权限。下次运行直接输入命令即可。

(3)shell内建命令

① 如何确定内建命令:type
type cd

type ifconfig
② 执行程序:. 和source
. ./test.sh

source test.sh
③创建命令别名:alias
④ 切换目录:cd
⑤ 声明变量:declare/typeset
#!/bin/bash
#shell是弱类型编程语言,声明变量时并不需要指明类型
declare str="hello world"
echo $str
declare a=1
echo $a
declare pi=3.14
echo $pi

fun1()
{
   
        echo "fun1"
}
fun2()
{
   
        echo "fun2"
}

#使用-r 声明变量为只读,不允许修改
#使用-a 声明变量
#使用-F 显示脚本定义的函数
#使用-f 显示脚本定义的函数体

echo "declare -F"
declare -F

echo "declare -f"
declare -f
⑥ 打印字符:echo

该命令默认最后加上换行符,使用 -n 参数可以不打印换行符

默认情况,禁止解释打印反斜杠转义的字符,若需要打印转义字符,需要使用 -e 参数

⑦ 循环控制:break(跳出循环)/continue (跳过当次循环,进入下一次循环)
⑧ 退出shell:exit
⑨ 整数运算:let
#支持+ - * /(计算结果为整数) % **(次方) 
let a=2+2      #a=4
let b=2**3     #b=8
#支持自增/自减
let i++
let j--
#支持+= -= *= /= %=
let c+=10

二、shell编程基础

1、变量

(1)变量名

shell变量必须以字母或下划线开头,后面可以跟数字、字母、下划线,变量长度没有限制。

变量区分大小写。

(2)变量赋值与取值
① 赋值

【定义变量】 变量名=变量值

【注意点1】变量名和变量值之间用等号相连,之间没有任何空格,等号任何一边出现空格就会出错。

【注意点2】当变量中有空格时必须用引号(可以是双引号或单引号)括起来,否则会出错。
【Shell】Shell基础学习_第1张图片

② 取值

在变量前加 $ ,或使用${}.

【注意点3】如果变量值引用了其他变量,必须使用双引号。因为单引号会阻止shell解释特殊字符$
【Shell】Shell基础学习_第2张图片

(3)取消变量unset

取消变量指将变量从内存中释放,使用命令unset,后面跟变量名。函数也可以被取消,unset后面跟函数名。
【Shell】Shell基础学习_第3张图片

(4)数组

数组的每一项称为一个元素,对于每个元素可以使用索引方式取值。数组并不要求数组的每个元素都是相同类型。随时可以根据需要向数组中增加元素。

declare -a arr   #定义一个数组
arr[0]=1
arr[1]=2
arr[2]='hello world' #特殊shell中允许如此

#可以在创建时赋值
declare -a name=('jack' 'bob')

#可以给特定的元素赋值
declare -a numbers=([2]=2 [4]=4)#只给2,4索引元素赋值

#数组取值${数组名[索引]}
echo ${name[1]}

#取数组所有元素
echo ${name[*]}
echo ${name[@]}
#从表面上两者没有区别,但${name[*]}得到的是一个字符串,${name[@]}是以空格隔开的元素值

#获取数组元素个数(数组长度)
echo ${
   #name[*]}
echo ${
   #name[@]}
#字符串数组也可以获取某个元素的长度
echo ${
   #name[1]}

#数组截取:可以是截取数组的一部分,也可以是截取数组元素的一部分
 echo ${name[@]:0:2}#截取数组name,0表示从索引0开始,数字2表示取两个元素
 echo ${name[1]:0:2}#截取元素name[1]
 
#数组连接:将若干数组拼接
conn=(${name[@]} ${name2[@]})

#元素替换:将数组元素值替换成其他值
conn=(${conn[@]/jack/hellojack})

#取消元素/数组:使用unset将元素释放
unset conn[0]#取消数组索引0元素
unset conn #取消数组conn
(5)只读变量(常量)

这种变量在声明时就要求赋值,并之后无法修改。可以使用readonly内建命令创建,和declare -r 效果声明变量效果一致。

(6)变量的作用域

shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量开始到shell结束,或到主动使用unset删除该变量的地方为止。在变量的作用域内,该变量都是可见的,在函数内对变量也是可以访问、修改的

#!/bin/bash

declare

你可能感兴趣的:(Shell,shell)