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 会报错,
如果没有错误,则不显示任何内容。
------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屁小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值