赞
踩
#正常定义变量
[root@server ~]# Java_home=/usr/bin/jvm/jre-1.6.0-openjdk.x86_64
[root@server ~]# sum=0
[root@server ~]# back_up=/root
#使用$符号进行变量名的取值
[root@server ~]# echo $Java_home
/usr/bin/jvm/jre-1.6.0-openjdk.x86_64
[root@server ~]# echo $sum
0
[root@server ~]# echo $back_up
/root
[root@server ~]# vim test1.sh
#!/bin/bash
x=123
let x+=1
echo "x=$x"
[root@server ~]# bash test1.sh
x=124
[root@server ~]# vim test2.sh
#!/bin/bash
a=1
b="hello"
c="hello world" #(中间的如果有空格,必须加双引号)
back_dir=/mnt
[root@server ~]# a= 3
bash: 3: command not found...
[root@server ~]# b = 5
bash: b: command not found...
[root@server ~]# c =6
bash: c: command not found...
[root@server ~]# stu_name=zhang san
bash: san: command not found...
[root@server ~]# stu_name="zhang san"
[root@server ~]# stu_name='zhang san'
[root@server ~]# a=1024
[root@server ~]# echo $a
1024
[root@server ~]# echo ${a}
1024
[root@server ~]# set | more #分页显示
[root@server ~]# declare | more #也是分页显示
[root@server ~]# export 环境变量=值
[root@server ~]# export back_dir1=/home/fox
[root@server ~]# 变量名=值
[root@server ~]# export 变量名
[root@server ~]# name=huazi
[root@server ~]# export name
[root@server ~]# declare -x 变量名=值
[root@server ~]# declare -x age=20
这三个命令都是用来查看当前用户的环境变量
[root@server /]# env # 查看当前root用户的环境变量
[root@server /]# printenv # 同上
[root@server /]# export # 同上
以上定义的环境变量都是临时的,重启后会失效,若要永久生效,则需要写入到配置文件中
C语言 局部变量 全局变量
shell 自定义变量 环境变量
[root@server /]# bash test1.sh hello world 123 456
#当执行test1.sh 脚本时,第一个参数为hello到第四个参数可以使用特殊的符号表示,如:$1 \$2 \$3 ……
$0 : 脚本名
$1-$9 : 1-9个参数
${10} :10以上的参数需要大花括号括起
$* : 所有参数
$@ : 所有参数
$# : 参数个数
$$ : 当前进程的PID
$! : 上一个后台进程的PID
$? : 上一个命令的返回值状态码,0为成功
[root@server ~]# vim test3.sh
#!/bin/bash
echo "第2个位置参数是:$2"
echo "第1个位置参数是:$1"
echo "第4个位置参数是:$4"
echo "所有参数是:$*"
echo "所有参数是:$@"
echo "参数个数是:$#"
echo "当前脚本的进程pid值:$$"
echo "当前脚本的文件名:$0"
[root@server ~]# bash test3.sh 1 2 3 4 5
第2个位置参数是:2
第1个位置参数是:1
第4个位置参数是:4
所有参数是:1 2 3 4 5 # 本质为 "1 2 3 4 5"
所有参数是:1 2 3 4 5 # 本质为 "1" "2" "3" "4" "5"
参数个数是:5
当前脚本的进程pid值:2172
当前脚本的文件名:test3.sh
[root@server ~]# bash test3.sh a b c d e f g
第2个位置参数是:b
第1个位置参数是:a
第4个位置参数是:d
所有参数是:a b c d e f g
所有参数是:a b c d e f g
参数个数是:7
当前脚本的进程pid值:2175
当前脚本的文件名:test3.sh
当$* 和 $ @没有被引用的时候,它们确实没有什么区别,
都会把位置参数当成一个个体, "$*"会把所有位置参数当成
一个整体(或者说当成一个单词),如果没有位置参数,
则"$* "为空,如果有两个位置参数并且IFS为
空格时,"$*"相当于"$1 $2"
"$@"会把所有位置参数当成一个单独的字段,如果没有
位置参数($#为0),则"$@"展开
为空(不是空字符串,而是空列表),如果存在一个
位置参数,则"$@"相当于"$1",如果有
两个参数,则"$@"相当于"$1" "$2"等等
变量名=值
[root@server ~]# ip1=192.168.80.129 [root@server ~]# school="xiangongyedaxue" [root@server ~]# today1=`date +%F` [root@server ~]# today2=$(date +%F) [root@server ~]# echo $ip1 192.168.80.129 [root@server ~]# echo $school xiangongyedaxue [root@server ~]# echo $today1 2024-03-14 [root@server ~]# echo $today2 2024-03-14
read -参数 变量名
[root@server ~]# read hua
zi #通过键盘手动输入
[root@server ~]# echo $hua
zi
[root@server ~]# read -p "请输入姓名:" name1
请输入姓名:华子
[root@server ~]# echo $name1
华子
[root@server ~]# read -t 3 -p "请输入姓名:" name2
请输入姓名:[root@server ~]# 等待3秒未输入则结束输入
[root@server ~]#
[root@server ~]# read -s -p "请输入姓名:" name4
请输入姓名:[root@server ~]# -s关闭回显
[root@server ~]# echo $name4
哈哈
[root@server ~]# read
200 #输入200
[root@server ~]# echo $REPLY #当输入时没有变量接收则会存储到环境变量REPLY
200
[root@server ~]# read t1 t2 # 一次输入多个数据
12 34 #输入12,34
[root@server ~]# echo $t1 $t2
12 34
[root@server ~]# echo $t1,$t2
12,34
[root@server ~]# a=123
[root@server ~]# echo "$a"
123
[root@server ~]# echo '$a'
$a
[root@server ~]# vim test5.sh #!/bin/bash func() #定义函数 { echo "$v1" v1=200 } v1=100 func echo "$v1" [root@server ~]# bash test5.sh 100 200
[root@server ~]# vim test6.sh
#!/bin/bash
func() # 定义函数
{
v2=200
}
func
echo "$v2"
[root@server ~]# bash test5.sh
200
[root@server ~]# vim test7.sh
#!/bin/bash
func() # 定义函数
{
local v3=200 # 使用local关键字声明为局部变量
}
func
echo "$v3"
[root@server ~]# bash test7.sh
# 上例修改 [root@server ~]# vim test8.sh #!/bin/bash func() { #输出全局变量v1的值 echo "global variable v1 is $v1" #定义局部变量v1 local v1=2 #输出局部变量v1的值 echo "local variable v1 is $v1" } #定义全局变量v1 v1=1 #调用函数 func #输出全局变量v1的值 echo "global variable v1 is $v1" [root@server ~]# bash test8.sh global variable v1 is 1 local variable v1 is 2 global variable v1 is 1
[root@server ~]# expr 1 + 1 # 运算符左右要有空格 2 [root@server ~]# expr 1+1 1+1 [root@server ~]# a=1 [root@server ~]# b=2 [root@server ~]# expr $a + $b 3 [root@server ~]# expr a + b expr: 非整数参数 [root@server ~]# echo $((1+2)) 3 [root@server ~]# echo $((a+b)) 3 [root@server ~]# $((1+2)) # expr等价与echo+(()) bash: 3: command not found... [root@server ~]# echo $((1+2)) 3 [root@server ~]# echo $((5/2)) 2 [root@server ~]# echo $((5%3)) 2 [root@server ~]# echo $((3%5)) 3 [root@server ~]# echo $((50%30)) 20 [root@server ~]# echo $((1-5)) -4 [root@server ~]# echo $((2,5+5)) 10 [root@server ~]# echo $((2.5+5)) # (())不支持小数 -bash: 2.5+5:语法错误: 无效的算术运算符 (错误符号是 ".5+5") [root@server ~]# echo $[2+5] 7 [root@server ~]# echo $[2.5+5] -bash: 2.5+5:语法错误: 无效的算术运算符 (错误符号是 ".5+5") [root@server ~]# bc # 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+2 3 2-5 -3 5/2 2 1.5+3.6 5.1 5>3 1 3>5 0 quit # 退出交互模式
[root@server ~]# str1="hello world" [root@server ~]# echo ${#str1} # 计算变量的串长度 11 # 变量值截取 [root@server ~]# echo ${str1:0:3} # 从左边第一个字符开始截取3个字符 hel [root@server ~]# echo ${str1::3} # 同上,0可以省略 hel [root@server ~]# echo ${str1:1} # 从下标1字符开始截取到尾部 ello world [root@server ~]# echo ${str1:0-1:1} # 从右侧第一个字符开始截取1个,左边为0,右边为0-1 0-2 等 d [root@server ~]# echo ${str1:0-2:1} l [root@server ~]# echo ${str1:0-5} # 从右侧数第5个字符截取到尾部 [root@server ~]# echo ${str1: -5} # 使用空格替代0 world [root@server ~]# echo ${str1:-5} # 无空格提取整串 hello world
# 使用%截取字符串,含义:删除右边字符,保留左边字符 [root@server ~]# filename=testfile.tar # %. 表示从右边开始检索第一次出现的点 , 检索到后删除右侧,保留左侧 [root@server ~]# file=${filename%.*} [root@server ~]# echo $file testfile # 作用:保留左边内容,用于截取文件的主文件名,去掉扩展名 [root@server ~]# url=http://www.baidu.com/index.html [root@server ~]# ul1=${url%%:*} # %%表示从右向左检索最后一次出现的冒号,删除右侧保留左侧内容 [root@server ~]# echo $ul1 http [root@server ~]# url=http://www.baidu.com/index.html [root@server ~]# ul1=${url#*.} # #*.表示左向右检索第一次出现的点,删除左边,保留右边 [root@server ~]# echo $ul1 baidu.com/index.html [root@server ~]# url=http://www.baidu.com/index.html [root@server ~]# ul1=${url%/*} # %/* 表示从右向左检索第一次出现的/删除右侧保留左侧 [root@server ~]# echo $ul1 http://www.baidu.com [root@server ~]# url=http://www.baidu.com/index.html [root@server ~]# ul1=${url##*/} # ##*/ 表示左向右检索最有一次出现的/删除左边保留右边 [root@server ~]# echo $ul1 index.html #总结:不管哪种检索方向,检索过的都删掉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。