app开发者平台在数字化时代的重要性与发展趋势解析
790
2022-11-18
shell编程提高
一、shell编程提高 (1) $#:执行shell脚本时的命令行参数,不包括脚本本身; $@:表示规则中的目标文件夹集; $+:表示所有的依赖文件,以空格隔开,并以出现的先后为顺序,可能包含重复的依赖文件; $^:表示所有的依赖文件,以空格隔开,不包含重复的依赖文件; $?:执行上一条shell命令的返回值; $<表示第一个依赖文件名称; :shell编程中的空命令;
--------------------------------------------------------------------- (2)for的第一种形式: for var in list do 命令串 done 1-每次从单词本中取出一个单词,然后赋值给变量, 然后执行命令1和命令2 2-循环的次数由单词表中的单词个数决定.
for的第二种形式: for var do 命令串 done 说明:与第一种方式相比,少了in list项。此时,for循环省略了list,list值由当前程序的命令行参数代替。每循环一次,var中存储的就是一个命令行参数; --------------------------------------------------------------------- (3)util循环语句,和while语句基本功能相同,不过util在判定为假时才继续循环; 语法: util 条件表达式 do 命令行; done ------------------------------------------------------------------ (4)两种格式: 函数名() { .... } 或者: function 函数名() { .... }
在调用函数时,可以传递任意参数,在函数中可以通过位置参数$1,$2的方式进行引用。函数也可以有返回值,可以通过查询全局变量$?的值获取函数返回值。 ------------------------------------------------------------------- (5)expr 一般用于整数值,但也可以用于字符串; var=`expr 1 + 3` echo "var : $var" ((var = 1 + 3)) --------------------------------------------------------------------------- (6)exit 0 正常退出 exit 非零 非正常退出 sleep n 暂停n秒钟 --------------------------------------------------------------------------- (7)select循环与菜单 语法结构: select var in list do #循环开始的标志位 commands #循环变量每取一次值,循环体就执行一次 done #循环结束标志 1.select 循环主要用于创建菜单,按数字顺序排列菜单项,将显示在标准错误上,并显示ps3提示符,等待用户输入 2.用户输入菜单列表中某个数字,执行相应的命令 3.用户输入被保存在内置reply中。 select与case: 1.select是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环。 2.select经常和case联合使用。 3.与for循环类似,可以省略in list,此时使用位置参量。 ----------------------------------------------------------------------------- (8)shift命令 shift[n] 1.用于将参量列表list左移指定次数,缺省为左移一次 2.参量列表list一旦被移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到shift.
util[ -z "$1" ] do echo "$1" shift done echo exit 0 ---------------------------------------------------------------------------- (9)shell编程字符串操作 #!/bin/bash #VAR="abcdefg"; VAR="/usr/bin/local/" echo "VAR=$VAR" #${#var} 返回字符串变量 var 的长度 echo -n '${#VAR}='; sleep 1;echo "${#VAR}"
#${var:m} 返回${var}中从第 m 个字符到最后的部分,其中,m 的取值从0 到${#var}-1,下同 echo -n '${VAR:2}='; sleep 1;echo "${VAR:2}"
#${var:m:len} 返回${var}中从第 m 个字符开始,长度为 len 的部分 echo -n '${VAR:2:3}='; sleep 1; echo ${VAR:2:3}
#${var#pattern} 删除${var}中开头部分与 pattern 匹配的最小部分 echo -n '${VAR#*b}='; sleep 1; echo ${VAR#*b}
#${var##pattern} 删除${var}中开头部分与 pattern 匹配的最大部分 echo -n '${VAR##*b}='; sleep 1;echo ${VAR##*b}
#${var%pattern} 删除${var}中结尾部分与 pattern 匹配的最小部分 echo -n '${VAR%b}='; sleep 1;echo ${VAR%b}
#${var%%pattern} 删除${var}中结尾部分与 pattern 匹配的最大部分 echo -n '${VAR%%bin}='; sleep 1;echo ${VAR%%bin}
echo -n '${VAR%bin*}='; sleep 1;echo ${VAR%bin*}
echo -n '${VAR%%bin*}='; echo ${VAR%%bin*}
#${var/old/new} 用 new 替换${var}中第一次出现的 old echo -n '${VAR/bin/sbin}='; echo ${VAR/bin/sbin}
#${var//old/new} 用 new 替换${var}中所有的 old(全局替换) echo -n '${VAR//bin/lib}='; echo ${VAR//bin/lib}
echo -n '${VAR/bin*/lib}='; echo ${VAR/bin*/lib}
#注:pattern,old 中可以使用通配符 ------------------------------------------------------------------------------ (10)shell脚本之数组实现 #1.数组定义 #一对括号表示是数组,数组元素用“空格”符号分割开。 a=(1 2 3 4 5 6 7 8) echo $a
#2.数组的读取与赋值 #1)得到长度:用${#数组名[@或*]} 可以得到数组长度 echo ${#a[@]} echo ${#a[*]}
#2)读取:用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容 echo ${a[4]} echo ${a[*]} echo ${a[@]}
#3)赋值:直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素 a[1]=100 echo ${a[*]} a[5]=140 echo ${a[@]}
#4)删除:直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。 a=(1 2 3 4 5 6 7 8) unset a echo ${a[*]}
a=(1 2 3 4 5 6 7 8) unset a[1] echo ${a[*]} echo ${#a[@]}
#3.数组特殊使用 #1)分片:直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开, #因此如果加上”()”,将得到切片数组,下面例子:c 就是一个新数据。 a=(1 2 3 4 5 6 7 8) echo ${a[@]:0:3} echo ${a[@]:1:4} c=(${a[@]:1:4}) echo ${#c[*]} echo ${c[*]}
#替换:调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。 a=(1 2 3 4 5 6 7 8) echo ${a[@]/3/100} echo ${a[@]}
b=(${a[@]/3/100}) echo ${b[@]} ------------------------------------------------------------------------------ (11)shell脚本之脚本调试 1. bash –x 脚本名 说明:该选项可以使用户跟踪脚本的执行,此时 shell 对脚本中每条命令的处理 过程为:先执行替换,然后显示,再执行它。shell 显示脚本中的行时,会在行 首添加一个加号 “ + ”。 2. bash –v 脚本名 说明:在执行脚本之前,按输入的原样打印脚本中的各行,打印一行执行一行。 3. bash –n 脚本名 说明:对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错, 如果没有错误,则不显示任何内容。 ------------------------------------------------------------------------------
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~