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 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'
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