Shell脚本和编程 | 青训营笔记

121 阅读4分钟

Shell 编程和Shell脚本 需要掌握 理解Shell功能作用 编写第一个shell脚本:输出hello world 变量 流程控制(分支、循环) shell其他注意事项 正则表达式

1、理解Shell功能作用——shell:命令的解释器(命令行) Unix最常见的shell:bash shell

Windows的shell:cmd powershell

shell脚本的作用:把命令写在可执行文件中,执行文件相当于执行命令,并且可以在其中添加分支、循环等高级功能

shell脚本必须为可执行文件,如果在PATH路径中,可以直接使用文件名进行调用。

which <命令> #查看命令的文件路径 1 2、第一个脚本:输出hello world 在屏幕上输出hello world

echo “hello world”【用引号引起来,是一个整体】

写入一个可执行文件(通常文件以sh结尾【xxx.sh】)

新建一个1.sh,写入以下内容

#!/bin/bash #用bash shell语法运行 echo 'hello world' 1 2 #!符号能够被内核识别为一个脚本的开始,这一行必须位于脚本的首行,/bin/bash 是bash程序的绝对路径,在这里表示后续的内容将通过bash程序解释执行。

执行shell脚本(先加权限)

chomd +x 1.sh

sh 1.sh #不需要执行权限

或 bash 1.sh #不需要执行权限

或 ./1.sh

或 <绝对路径/相对路径> 1.sh #需要执行权限

或 source 1.sh

或 . 1.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 3、变量 使用 env 命令可以查看环境变量,使用 set 命令可以查看局部变量。

变量不需要提前声明

$变量名 ——取变量的值

环境变量 定义系统的相关配置项,例如默认的文本编辑器

系统的相关配置项 export查看

echo hostnameechohostname echo shell export 1 2 3 预定义变量 $1 #第一个变量

$2 #第二个变量

ls -a -l #-a是第一个,-l是第二个

$? #上一个命令的返回值(【一般】正确0错误非0)

$n #n为数字,10以上要加{}(${10}),第n个命令

$* #命令行中所有参数

$@ #所有参数,但把每个参数区分对待

$# 命令行中所有参数的个数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

自定义变量 pie=3.14 命名空间(作用范围)是进程内部(当前窗口、用户的shell) echo $pie 1 2

引号的作用 “双引号”:引号内的变量会生效

‘单引号’:引号内的变量不会生效

后/反引号 :引号内的命令会生效【等价于$()】

\:转义符,后面第一个字符没有任何特殊含义

echo "hostname"echohostname" echo 'hostname' echo pwd echo "$hostname" 1 2 3 4 命令本身也是文件

which <命令> 查看命令的文件路径

更改shell环境 a) 定义 shell 变量(局部变量)

A=a #定义变量 A 的值为 a

B=b #定义变量 B 的值为 b

A_B=123 #定义变量 A_B 的值为 123

echo A #使用美元符号“”表示变量

echo A_B #正确用法:echo {A_B} 使用大括号括起变量,$()表示新执行括号中的命令,不能用于表示变量的范围

unset A #注销变量A

readonly A=a #声明静态变量A,不能注销(unset) 1 2 3 4 5 6 7 8 9 10 11 12 13 定义规则

变量名称可以由字母、数字和下划线组成,但不能数字开头

等号两侧不能由空格

变量名称一般习惯为大写

b) 设置环境变量

通过前面的例子介绍A=a 只是定义了一个局部变量,只会在本 shell 中生效,如果要在其他 shell 中生效的话,例如子 shell,就需要导出为环境变量。(环境变量在其他的窗 口下也无法生效)使用 export 命令实现导出。

为了让/etc/profile的环境变量生效,需要使用source /etc/profile重启系统或者注销用户

使用自定义的环境变量:

A_HOME=/地址

echo "a_home=$A_HOME" 1 2 3 c) 自动设置变量

当 Bash 启动的时候,会加载变量的配置文件来初始化 shell 环境。因此,通过配置变量的配置文件,可以设置变量重启后依然生效,设置在所有的会话和 shell 中都生效。

/etc/profile(系统全局变量和登录系统的一些配置)

~/.bash_profile(用户自定义配置)

~/.bashrc(影响所有的交互式 shell 用户的配置)

/etc/bashrc(全局自定义配置) Bash 按以上顺序运行配置文件,后运行覆盖前运行文件的同名变量。

d) 取消设置变量

export -n <变量> #将变量从环境变量变回局部变量

unset <变量> #取消变量设置 1 2 3 注意:

export 命令将环境变量变回局部变量,局部变量仍能在当前 shell 中生效 unset 命令不修改配置文件中的内容,所以运行后,在当前 shell 变量被取消,一旦 重新加载配置文件,那么变量会重新生效。 4、流程控制 分支 if语句

if [ 条件1 ];then xxxxx elif [ 条件2 ];then xxxx ...... else xxxxx fi 1 2 3 4 5 6 7 8 写一个脚本,判断用户的输入是yes or no if[ 输入 = yes ];then echo "your input is right" elif[ 输入 = no ];then echo "no" else echo "error" fi 1 2 3 4 5 6 7 8

case语句

case 变量的值 in 值1) xxxx ;; 值2) xxxx ;; *) xxxx ;; esac 1 2 3 4 5 6 7 8 9 10 11

输入的处理:Linux自带了一个函数read,默认从键盘读取输入,如果不指定变量,默认赋值给一个变量REPLY