linux:shell快速入门

1 代码规范

[root@localhost ~]# cat HelloWorld.sh
#!/bin/bash
#This Line is a comment
echo "Hello World"

  第一行永远是以“#!”开头的,这是一个脚本开始的标记,它是在告诉系统执行这个文件需要使用某个解释器,后面的/bin/bash就是指明了解释器的具体位置。
  第二行同样是以“#”开头的,但是这里是一个注解。脚本中所有以“#”开头的都是注解

2 文件命名规范

文件名.sh

3 使用流程

3.1 创建sh文件

touch/vim xxx.sh

3.2 编写sh代码

3.3 运行脚本及执行权限

3.3.1 bash这个脚本

  如果直接在脚本目录bash这个脚本,不需要第一行的#!因为直接bash一个文件就是指定了使用Bash Shell来解释脚本内容。

tys@tys-virtual-machine:~/study/shellStudy$ bash test.sh 
hello world

3.3.2 ./ 给脚本可执行权限

  使用“./”来运行,它代表运行的是当前目录下的HelloWorld.sh脚本,如果采用这种方式而脚本没有可执行权限则会报错。

tys@tys-virtual-machine:~/study/shellStudy$ ./test.sh
-bash: ./test.sh: 权限不够

  如果希望该脚本能成为默认的系统命令,简单地将该脚本复制到任一系统$PATH变量所包含的目录中,同时赋予可执行权限,下次运行的时候只需要直接输入该命令即可。也支持用Tab键补全命令。

4 Shell的内建命令

  所谓Shell内建命令,就是由Bash自身提供的命令,而不是文件系统中的某个可执行文件。
  例如,用于进入或者切换目录的cd命令,虽然我们一直在使用它,但如果不加以注意很难意识到它与普通命令的性质是不一样的:该命令并不是某个外部文件,只要在Shell中你就一定可以运行这个命令。打个比方,就像使用语言互相沟通是人类与生俱来的能力,但是我们有时却需要使用移动电话来进行远距离的沟通,那么人类本身具备的语言能力就是“内建”的能力,而移动电话却是一个外部的工具。
  $PATH变量包含的目录中几乎聚集了系统中绝大多数的可执行命令。
  通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘I/O,还需要fork出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前Shell进程的一个函数。

4.1 如何确定内建命令:type

  判断一个命令是不是内建命令只需要借助于命令type即可,如下所示:

type cd

  不要试图用脑子记住所有的命令,这不可能也不需要。

4.2 echo 输出

4.3 降低单次循环的速度 sleep

5 Shell配置文件、环境变量

5.1 全局配置文件

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

5.2 个人配置文件

5.3 查看当前Shell系统环境变量

env

5.4 查看当前Shell变量(系统环境变量+自定义变量+函数)

set

6 变量

6.1 变量名

由数字、字母、下划线组成。
不能由数字开头。
不能用Shell的关键字作为变量名。

6.2 赋值

赋值时等于号=紧贴变量名,不能有空格

6.3 数值类型

默认变量类型都是字符串

6.4 使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量值有空格则必须用双引号“”
使用井号+花括号#{}区分变量???

6.5 局部变量

6.5.1 定义

  局部变量就是定义在一个脚本文件中的变量,只能在这个脚本文件中使用的变量。

6.6 全局变量

6.6.1 Shell父子脚本环境

假如有脚本A.sh和B.sh,在A.sh执行了B.sh,即有命令:

bash B.sh

则A是父脚本,B是子脚本

6.6.2 设置全局变量

export var_name
### 6.7 常量/只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
```bash
var_name="https://www.runoob.com"
readonly var_name

6.7 删除变量

unset variable_name

6.8 字符串

6.8.1 索引

第一个字符的索引值为 0。

6.8.2 单、双引号

双引号内可用变量
单引号内全是字符

6.8.3 获取字符串长度

主要变量名前要加#井号

string="abcd"
echo ${#string}   
# 输出 4

6.8.4 截取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} 
# 输出 unoo

6.8.5 查找子字符串

查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

string="runoob is a great site"
echo `expr index "$string" io`  
# 输出 4

注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

6.8.6 拼接字符串

your_name="runoob"
6.8.6.1 使用双引号拼接:
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

输出结果为:
hello, runoob ! hello, runoob !

6.8.6.2 使用单引号拼接:
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

输出结果为:
hello, runoob ! hello, ${your_name} !

6.9 数组

6.9.1 定义

  bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
  在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

#数组名    =(值1    值2     ...    值n   )
array_name=(value0 value1 value2 value3)

   下标 由 0 开始编号,类似于 C 语言,数组元素的。

6.9.2 读取

  获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

6.9.2.1 读一个元素值

读取数组元素值的一般格式是:

#      ${数组名     [下标]}
valuen=${array_name[n]}
6.9.2.2 读全部元素值

使用 @ 符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

6.9.3 获取数组的元素个数(数组长度)

获取数组长度的方法与获取字符串长度的方法相同,例如:

6.9.3.1 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
6.9.3.2 取得数组单个元素的长度
length=${#array_name[n]}

7 注释

7.1 单行注释

以 # 开头的行就是注释,会被解释器忽略。

7.2 多行注释

多行注释还可以使用以下格式:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

实例:

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

8 流程控制

8.1 判断

8.1.1 if … then … else … fi

注意! sh 的流程控制不可为空,如果 else 分支没有语句执行,就不要写这个 else。
语法格式:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

8.1.2 elif

语法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

8.1.3 [ … ]

注意! [  ]内要加2个空格,不可省略!
大于: -gt
小于: -lt
等于:-eq
大于等于:
小于等于:
不等于:

8.1.4 ((…))

直接使用 > 和 <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值