Linux-004-shell

140 阅读2分钟

shell 介绍

Linux 基本都支持 bash shell。

hello word

就像学习java一样,第一个shell 脚本,往控制台上输入一句话 “Hello word by shell” 。新建一个hello.shell 文件,文件扩展名为 “.shell” 。文件的内容如下:

#!/bin/bash
echo "Hello word by shell"

执行hello.shell文件
执行脚本前,要给shell脚本设置可执行权限,chmod +x ./Xxx.shell

chmod +x ./hello.shell #是脚本具有可执行权限
./hello.shell #执行脚本,控制台会输入如下内容

hello word by shell

变量定义和引用变量

在生一个脚本的基础之上,我们添加些新鲜,在控制输出 "Hello word by shell. I am Linux.",要求是通过定义一个变量,并赋值为“Linux” 。hello.shell 内容如下:

#!/bin/bash
my_name="Linux"
echo "Hello word by shell. I am ${my_name}."

变量定义规范:
1、只能使用字母和数字,不能以字母开头
2、变量名中间不能有空格,但是可以有下划线 “_”
3、标点符号、特殊字符不能使用
4、不能使用bash 里的关键字 5、变量和“=”之间不能有空格(其他语法如java可能容许有空格)

引用变量:
变量名或者变量名或者{变量名}, 推荐使用 变量名,如上述的{变量名} , 如上述的 {my_name} 。

变量是可以被重新定义的

#!/bin/bash
my_name="Linux"
echo "I am ${my_name}."

my_name="Bill" #变量重新定义,并赋值

echo "I am ${my_name}."

定义只读变量
只读变量可以立即成java里的常量,一旦被定义则是不能更改的,shell 使用关键字 “readonly” 修饰,如下是定义了一个只读变量 nick_name 。

nick_name="QQ"
readonly nick_name
echo "hello , ${nick_name}"

# 上是内容是可以正常输出 hello,QQ 

# 如果对只读变量进行修改,shell 执行会报错,只是这一行操作报错,不会影响程序的后续执行
nick_name="QQ"
readonly nick_name
nick_name="wechat" // #假设行号是15
echo "nice to meet you , ${nick_name}"
# 程序执行到15行时候,会报 ./test.shell : line 15: nick_name readonly variable
# 后面会正常输出 nice to meet you, QQ

变量类型
局部变量(自定义变量),作用于当前的shell文件,其他shell文件不能使用
环境变量,作用于整个系统,所有程序都可以使用
shell变量,

# 把变量转换为环境变量
env_name="li"
export env_name
bash

#上述3行操作把env_name 转为了环境变量,获取环境变量通过 echo $变量名,如获取 env_name的环境变量中如下
echo $env_name

#把shell 面了写在shell 或者shell交互的方式均可以定义环境变量

#删除环境变量,unset 环境变量名,如删除 env_name 执行如下命令
unset env_name

vim 操作

vim 3个模式
命令模式 vim 文件名默认是命令模式,在其他模式下esc进入命令模式

输入模式 命令模式下按下 “i”键 进入输入模式,按下esc 退出输入模式,切换到命令模式

底线模式 命令模式下按下“:”,如不保存退出vim “:q!”,保存退出 “:wq”

进入输入模式
vim 文件名后 i键 进入 insert 模式

退出输入模式,进入命令模式
esc 进入命令模式,esc 退出 insert 输入模式,进入命令模式

快速删除单行
在命令模式下,快速按下dd键,删除光标坐在的行

定位到指定行
命令模式下,“:n”,快速定位到第n行

给shell脚本传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

有如下一段shell脚本程序run.shell ,我们需要给3个占位符赋值分别为 10 20 30 ,如何做

#!/bin/bash

echo "first=${1}"
echo "second=${2}"
echo "3th=${3}"

注意:给shell 设置可执行权限, chmod +x 文件名
执文件 ./run.shell 10 20 30 ,10 会赋值给1,20会赋值给{1}, 20会赋值给{2},30 会赋值给${3}

shell 中的数组

我相信99%的IT人员第一个学习的语言一定不是shell,可能是C或者JAVA 居多。那么我们直接说数组,shell只支持一维数据,并且不像C或者JAVA语言会限制数组的容量(什么的时候就限定),这个和PHP倒是类似,索引下标也是从0开始,数组的申明使用括号“()”。我们关注这个几个点:
1、数组的初始化, arr=()
2、数组的赋值,arr[i]=E
3、按照索引下标方式获取数组中的元素或者值,${arr[i]}
4、获取数组中所有的值 arr[] 或者 arr[@]
5、数组中元素的个数,数组的大小 #arr[
] 或者#arr[@]

shell脚本执行入参的执行也是采用数组的模式,想起来了吧!

不多说,直接上代码 (vim array.shell 设置执行权限 chmod +x array.shell):

#!/bin/bash

# shell 中 数组的操作

#1、一维数组的定义,shell 只有一维数组 数组变量名=() 
echo "定义个数组 array= X D C B A"

arr_level=(X D C B A)

#1、获取数组中的第一、二个元素的值
echo "第一个元素是${arr_level[0]}"

echo "第二个元素是${arr_level[1]}"

#2、给数组中一个元素赋值为E 或者覆盖第一个元素的为E
echo "数组中第一个元素原本是X ,现在将其改成E"
arr_level[0]=E

echo "第一个元素是${arr_level[0]}"

#3、获取数组中所有元素

echo "*方式获取数组中所有元素:${arr_level[*]}"

echo "@方式获取数组中所有元素:${arr_level[@]}"


#4、数组的大小
echo "*方式,数组的大小:${#arr_level[*]}"
echo "@方式,数组的大小:${#arr_level[@]}"


# the end