地产平台网站模板,响应式网站图解,网页界面布局,二级网站建设方案 试行文章目录 目录 文章目录 前言 一.变量 概述 定义 自定义变量 环境变量 概述#xff1a; 定义环境变量#xff1a; 位置变量 $*会把所有位置参数当成一个整体#xff08;或者说当成一个单词 变量的赋值和作用域 read 命令 变量和引号 变量的作用域 变… 文章目录 目录 文章目录 前言 一.变量 概述 定义 自定义变量 环境变量 概述 定义环境变量 位置变量 $*会把所有位置参数当成一个整体或者说当成一个单词 变量的赋值和作用域 read 命令 变量和引号 变量的作用域 变量的运算符 总结 前言
前文初步介绍了shell脚本的基础知识本章我们将通过引入一些新的知识和例题学会完成一些简单的shell脚本编写。 一.变量
概述 在shell脚本中变量是一个可用于存储或检索值的名称。变量可以是数字、字符串或其他类型的数据。在shell脚本中变量通常以美元符号$开头后跟变量名称。
定义
原则直接使用不需要变量声明格式变量名变量的值
例 1
[rootserver ~]# vim test2.sh
#脚本抬头
#!/bin/bash
# 定义变量c
chello world
# 定义路径
bak_dir/data/backup
[rootserver ~]# bash test2.sh
hello world例2 在shell脚本中let命令用于执行整数运算并将结果赋值给变量。可以理解为是一种执行算术运算的快捷方式。 [roottimeserver ~]# bash test3.sh
x123
let xx1 #let使shell脚本识别变量不使用let时x会被识别为字符串
y$x
echo $y
[roottimeserver ~]#
124 #不加let 输出为 x1 前后不能收空格
[rootserver ~]# a 3
bash: 3: command not found...
[rootserver ~]# b 5
bash: b: command not found...字符串类型建议使用双引好作为定界符引起尤其是字符串中有空格
[rootserver ~]# stu_namezhang san
bash: san: command not found...
[rootserver ~]# stu_namezhang san
[rootserver ~]# stu_namezhang san自定义变量
概念上述以赋值形态形成的变量定义形式称为自定义变量 查看变量set
取消环境变量unset
环境变量 概述 环境变量是操作系统中一个重要的概念它用来存储一些在操作系统级别下用到的值比如路径、用户名、密码等。在Linux系统中环境变量存储在系统中的一个地方每个终端都可以访问它们。
一些常用的环境变量包括
PATH用于指定可执行程序的搜索路径。HOME指定当前用户的主目录。SHELL指定当前用户使用的Shell程序。USER指定当前用户的用户名。LANG指定当前系统使用的语言环境。
定义环境变量
方法 1export 环境变量值
方法 2 变量名值 export 变量名
方法 3declare -x 变量名值
显示当前用户的环境变量env
位置变量 概念当一条命令或脚本执行时后面可以跟多个参数可以使用位置变量来表示该参数
[roottimeserver ~]# vim test3.sh
echo 第2个位置参数时:$2
echo 第1个位置参数时:$1
echo 第4个位置参数时:$4
echo 所有位置参数时:$*
echo 位置参数个数时:$#
echo 当前进程的PID值:$$
[roottimeserver ~]# bash test3.sh 1 2 3 4 5
第2个位置参数时:2
第1个位置参数时:1
第4个位置参数时:4
所有位置参数时:1 2 3 4 5
位置参数个数时:5
当前进程的PID值:36113
常见的位置变量
$0 : 脚本名$1-$9 : 1-9个参数${10} :10以上的参数需要大花括号括起$* : 所有参数$ : 所有参数$# : 参数个数$$ : 当前进程的PID$! : 上一个后台进程的PID$? : 上一个命令的返回值状态码0为成功
$*和$#区别
$会把所有位置参数当成一个单独的字段 $*会把所有位置参数当成一个整体或者说当成一个单词 [rootserver ~]# set -- I am test command [rootserver ~]# for i in $; do echo $i; doneIam5testcommand[rootserver ~]# for i in $*; do echo $i; done I am test command 变量的赋值和作用域 read 命令
概述
read 命令从标准输入中读取一行并把输入行的每个字段的值指定给 shell 变量量格式read -参数 变量名参数
-p “提示语句:” 屏幕打印出一行提示语句。
-n数字当输入的字符数目达到预定数目时自动退出并将输入的数据赋值给变量如-n1 , 只要接受到 一个字符就退出。只要按下一个字符进行回答read命令立即接受输入并将其传给变量。无需按回车键
-t 等待时间 计时输入使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果 无论是否输入数据脚本都必须继续执行那么可以使用-t选项指定一个计时器。-t选项指定read命令等 待输入的秒数。当计时满时read命令返回一个非零退出状态
-s 关闭回显使read命令中输入的数据不显示在监视器上实际上数据是显示的只是read命令将文本颜 色设置成与背景相同的颜色常用格式read 变量名 read -p 提示信息: 变量名
例1
[rootserver ~]# read -p Enter Numbers: num
Enter Numbers: 9527
[rootserver ~]# echo $num
9527
[rootserver ~]# read -t 3 n1 # 不要输入内容等待3秒后自动结束输入
[rootserver ~]# read -s -p Enter your password: passw
Enter your password: [rootserver ~]# echo $passw
123456
[rootserver ~]# echo $REPLY
[rootserver ~]# read
100
[rootserver ~]# echo $REPLY # 当输入时没有指定变量接收会默认存储到REPLY变量中
100
# 一次性输入多个变量的值
[rootserver ~]# read t1 t2
12 35
[rootserver ~]# echo $t1 $t2
12 35面试题总结四种复制方法
1.直接赋值nameli si
2.read命令 read name
3.使用位置参数($1 $2 $3…) name$1
4.命令输入name$(whoami) 变量和引号
单引号 )单引号中的内容被视为纯文本其中任何其他特殊字符包括变量和命令替换都会被视为普通字符。例如单引号中的$VAR将被视为字符串$VAR而不是变量$VAR的值。双引号 )双引号中的内容可以包含变量和命令替换这些替换将被执行并被替换为其对应的值。双引号还可以用于转义特殊字符例如$和\。反引号/反撇号 或者$()在反引号或反撇号中的内容将被视为命令该命令将被执行并返回其输出。该输出将被替换为反引号或反撇号中的内容。
变量的作用域
全局变量
全局变量指的是在整个脚本中都可访问的变量。这些变量可以在脚本的任何位置进行声明和赋值并且可以在整个脚本的任何地方使用。
[rootserver ~]# vim test5.sh
#!/bin/bash
func() # 定义函数 1
{ echo $v1v1200
} 2
v1100
func #调用函数 3
echo $v1 4
[rootserver ~]# bash test5.sh
100
200
#程序执行顺序1-2之间为函数首先装入内存不调用首先执行v1100 接着调用函数
#当函数被调用后首先执行echo $v1 输出V1 由于函数内部没有定义V1 则到函数外部
#查找V1100 输出100 接着执行V1200此时函数执行结束接着执行echo $v1 输出200 局部变量范围更小仅限于某个程序段中如函数、shell等通过local关键字定义
# 上例修改
[rootserver ~]# vim test5.sh
#!/bin/bash
func() # 定义函数
{local v3200 # 使用local关键字声明为局部变量
}
func
echo $v3
[rootserver ~]# bash test5.sh#没有内容 变量的运算符 例 1
[rootserver ~]# expr 1 1 # 注意左右必须要有空格
2
[rootserver ~]# expr 11 # 否则原样显示
11
[rootserver ~]# a1
[rootserver ~]# b2
[rootserver ~]# expr $a $b # 支持变量
3
[rootserver ~]# let num12 # letecho 等价于expr
[rootserver ~]# echo $num
3
[rootserver ~]# let num1 2 # 注意let中运算符左右不能由空格
-bash: let: 语法错误: 需要操作数 (错误符号是 )
[rootserver ~]# echo $((12))
3
[rootserver ~]# echo $((5%3))
2
[rootserver ~]# echo $((3%5))
3
[rootserver ~]# echo $((1-5))
-4
[rootserver ~]# echo $((2 * 5)) # 可以有空格
10
[rootserver ~]# echo $((5.2-5)) # 只支持整数运算
-bash: 5.2-5语法错误: 无效的算术运算符 (错误符号是 .2-5)
[rootserver ~]# echo $[23] # [] 等价于 (())
5
[rootserver ~]# echo $[2.53] # # 只支持整数运算
-bash: 2.53语法错误: 无效的算术运算符 (错误符号是 .53)
[rootserver ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software
Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type warranty.
1.12
3.1
2.5-3.9
-1.4
1.54
0
53
1
quit # 退出交互模式
# 不进入交互模式直接使用bc需要放在最后
[rootserver ~]# echo scale3;11/3 | bc
3.66 例 2
# 返回变量长度
[rootserver ~]# str1hello world
[rootserver ~]# echo ${#str1}
11
# 变量截取
[rootserver ~]# echo ${str1:0:3} # 从左边第1个字符开始截取3个
hel
[rootserver ~]# echo ${str1::3} # 可以省略起始0
hel
[rootserver ~]# echo ${str1:1} # 从下标1开始截取到尾部
ello world
[rootserver ~]# echo ${str1:0-1:1} # 从右边第一个字符开始截取1个左边第一个为0右边第
一个为0-1
d
[rootserver ~]# echo ${str1:0-5} # 从右边第5个开始截取到尾部
world
[rootserver ~]# echo ${str1: -5} # 使用空格替代0同上
world
[rootserver ~]# echo ${str1:-5} # 没有空格表示提取整串
hello world
总结