shell学习笔记:变量相关

来源:互联网 发布:VPN连接用哪个端口 编辑:程序博客网 时间:2024/05/01 09:33
#!/bin/bash#==============================================================================================#1.变量定义#变量名必须以字母开头,变量和等号间不能有空格,值中如果有多个单词需要用双引号或者单引号引用起来#双引号引用的值可以进行变量替换、转义替换等,单引号引用的字符不能进行替换,全是字符串的一部分#获取变量值时,两边的花括号可加可不加,加上花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号#shell中没有类型之分,所有变量默认为字符串yourname="nnn"echo "your name is $yourname"echo "your name is ${yourname}"echo 'your name is ${yourname}'    #输出your name is ${yourname},没有进行变量替换#==============================================================================================#2.readonly只读变量#只读变量的定义只需在变量赋值后,在变量前加上readonly即可,这样后面的代码中就不能改变该变量的值myurl="http://www.baidu.com"readonly myurlmyurl="www.baidu.com"  #此处运行会报错"myurl:readonly variable"#==============================================================================================#3.unset删除变量#在使用完变量后,可以用unset将变量删除,但不能删除只读变量echo ${yourname}unset yournameecho ${yourname}       #输出空,变量已被删除unset myurl            #报错,“myurl: cannot unset readonly variable”#==============================================================================================#4.shell内置特殊变量#$0 表示当前执行的shell脚本名称,不会计算在$#/$*/$@中#$n 表示传递给脚本或函数的第n个参数#$# 表示传递给脚本或函数的参数个数#$@ 表示传递给脚本或函数的所有参数#$* 表示传递给脚本或函数的所有参数,与$@的区别是,在加上双引号后,"#@"将每个参数当成单独的字符串,"$*"将所有参数当成一个字符串#$? 表示上个命令或脚本的退出状态,或函数的返回值#$$ 表示当前shell脚本所在进程的进程idecho "Filename is $0"           #输出当前shell的脚本名称echo "First para is $1"         #输出传递给函数或脚本的第一个参数echo "Second para is $2"        #输出传递给脚本或函数的第二个参数echo "The number of para is $#" #输出传递给函数或脚本的参数个数,不包括文件名本身echo "The pid is $$"            #输出当前shell所在进程的idecho "The difference between $@ and $*:"#以下代码会将参数分多行输出for para in "$@"doecho "${para}"done#以下代码只讲参数输出到一行for para in "$*"doecho "${para}"done#==============================================================================================#5.数组定义和使用#shell中只支持一维数组,不支持多维数组,数组元素间以空格间隔,数组的下标默认从0开始计算,可定义不连续下标#获取数组元素值得时候一定要在元素两边加上花括号arr=(1 2 3 4 5)echo $arr[0]      #输出1[0],错误echo ${arr[0]}    #输出1#定义不连续下标arr[1]=5arr[5]=6#获取数组长度len=${#arr[@]}   #或len=${#arr[*]}#获取单个元素的长度lenn=${#arr[1]}  #获取第2个元素的长度#获取所有元素echo "${arr[*]}" #或echo "${arr[@]}"#==============================================================================================#6.数组在for循环中的应用#输出1到10之间的数(包括10)for i in $(seq 1 10)doecho $i   #每行输出一个元素donearr=($(seq 1 2 10))  #或arr=(`seq 1 2 10`)for i in ${arr[*]}doecho $i donefor skill in Lua Python Shelldoecho "I am good at ${skill}Script"done#==============================================================================================#7.字符串#shell中主要是区分单引号和双引号引用的字符串区别#获取字符串的长度s="abcd"echo "The length of s is ${#s}" #4#获取字串echo ${s:1:2} #输出bc, 字符串也相当于字符数组,下标从0开始,获取第2个位子后的2个字符#==============================================================================================#8.变量赋值n=10let n+=1         #此处不能用n=$n+1,否则n的结果是10+1字符串((n++))          #双小括号里面按C语法解释n=$(($n+1))      #括号内的表达式空格随意,与c语法类似n=`expr $n + 1`  #此处$n后有空格,+号两边的空格不能少n=$(expr $n + 1) #同上#==============================================================================================#9.变量输入read#读取一个变量echo -n "input a number:"      #加-n不换行,加-e启用转义字符,否则转义字符按原样输出read numread -p "input a number" num   #read 加-p直接输出提示语句,而不用echoecho "input a array:"read -a arr                    #read 加-a表示读取一个数组,以回车结束#==============================================================================================


0 0