0
点赞
收藏
分享

微信扫一扫

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结


文章目录

  • ​​1.函数的使用​​
  • ​​2.字符串操作​​
  • ​​3.一些内置命令:expr、shift、eval、trap等​​
  • ​​4.Shell内置命令总结​​

1.函数的使用

  • 和其它编程语言一样,Bash也可以定义函数
  • 一个函数就是一个子程序,用于完成特定的任务,当有重复代码,或者一个任务只需要很少的修改就被重复几次执行时,这时你应该考虑使用函数
  • 函数的一般格式为

function function_name
{
commands
}

推荐使用下面的方式
function_name ()
{
commands
}

  • 函数eg
    (1)只需要输入函数名即可调用该函数
    (2)函数必须在调用之前定义

#!/bin/bash

fun()
{
echo "Entering function"
echo "Exiting function"
}
fun

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串

  • 函数参数传递eg

#!/bin/bash
func1()
{
echo "the parameter count: $#" $#参数个数
echo "fist para: $1" $1第一个参数
echo "second para: $2" $2第二个参数
}

func1 a b

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串操作_02

  • shell调用其它shell中的函数
    vim tool.sh

#!/bin/bash
test()
{
echo "hello world"
}

vim fun.sh

#!/bin/bash
. tool ##点号表示包含tool文件,相当于C语言中include头文件
test ##调用test函数

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串_03

2.字符串操作

  • 字符串操作

${#var}   返回字符串变量var的长度
${var:m} 返回${var}中从第m个字符到最后的部分,m从0开始,m的取值从0到${#var}
${var:m:len} 返回${var}中从第m个字符开始,长度为len的部分
${var#pattern} 删除${var}中开头部分与pattern匹配的最小部分
${var##pattern} 删除${var}中开头部分与pattern匹配的最大部分
${var%pattern} 删除${var}中结尾部分与pattern匹配的最小部分
${var%%pattern} 删除${var}中结尾部分与pattern匹配的最大部分
${var/old/new} 用new替换${var}中第一次出现的old
${var//old/new} 用new替换${var}中所有的old(全局替换)

注意:pattern,old中可以使用通配符

  • 测试:

#!/bin/bash

var="/aa/bb/cc"
result1=${var#*/}
result2=${var##*/}
result3=${var%/*}
result4=${var%%/*}
echo $var
echo '${var#*/}'=$result1
echo '${var##*/}'=$result2
echo '${var%/*}'=$result3
echo '${var%%/*}'=$result4

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串操作_04


(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串操作_05

3.一些内置命令:expr、shift、eval、trap等

  • 生成随机数的特殊变量

echo $RANDOM

  • expr:通用的表达式计算命令
    表达式中参数与操作符必须以空格分开,表达式中的运算可以是算数运算,比较运算,字符串运算和逻辑运算。

expr 5 % 3
expr 5 \ 3
#乘法符号必须被转义

注意:目前用的少,可用$[...]替换

  • shift命令
    (1)一般用于函数或者脚本程序参数出来,特别是参数多余10以上的时候
    (2)将所有参数变量向下移动一个位置,$2变成$1,$3变成$2,依次递进,但是$0保持不变($0是脚本名称)
  • eg:

#!/bin/bash

while [ "$1" != "" ]
do
echo $1
shift
done

  • 测试:
  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串_06

  • eg:

#!/bin/bash

while [ "$1" != "" ]
do
echo $*
shift
done

  • 测试:
    将参数循环一遍,并打印
    $*表示所有的参数列表
  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_bash_07

  • eval命令
    将所有的参数连接成一个表达式,并计算或执行该表达式,参数中的任何变量都将被展开。

eval arg1 [arg2] ... [argN]

listpage="ls -l | more"
$listpage

listpage="ls -l | more"
eval $listpage

  • eg:

#!/bin/bash
cmd=
if [ "$1" == "1" ];then
cmd="ls"
else
cmd="ls -l"
fi

eval $cmd

  • 测试:
    eval使得要执行的命令具有动态性
  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_bash_08

  • trap命令
    (1)trap:捕获信号的意思
    (2)信号是软中断,使得程序有了异步处理的能力。
    (3)当程序顺序执行下来的时候,如果发生信号,将转去执行信号所关联的操作。
    (4)trap可以对信号的操作进行关联

trap command signal

command
一般情况下是Linux命令
’ ’表示发生陷阱时为空指令,不做任何动作
’-’表示发生陷阱时采用缺省指令

signal
HUP(1) 挂起;一般因终端掉线或用户退出而引发
INT(2) 中断;一般因按下”Ctrl+C”组合键引发
QUIT(3) 退出;一般因按下”Ctrl+\”组合键引发
ABRT(6) 异常中止;一般因某些严重的执行错误而引发
ALRM(14) 闹钟;一般是超时时钟到来而引发
TREM(15) 中止;一般由系统在关机的时候发出

  • eg:

#!/bin/bash
#安装2、3号信号
#处理代码为"rm -f tmp$$;exit 0“
trap "rm -f tmp$$;exit 0" 2 3
#生成文件,文件名为tmp+当前进程号
touch tmp$$
#睡眠60秒,以便向当前进程发送信号
sleep 60


exit 0表示退出当前进程
$$表示当前进程号
当2号信号和3号信号来的时候,会执行rm -f tmp$$;exit 0

  • 测试:
  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_bash_09


  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串操作_10

  • 按下ctrl + C,产生2号信号,2号信号的动作是删除文件,并退出当前进程.
    tmp21065文件已经不存在了
  • (P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串操作_11

  • eg:锁屏程序

#!/bin/bash
trap "nice_try" 2 3 15
TTY=`tty`
nice_tty()
{
echo -e "\nNice try, the terminal stays locked"
}
##stty -echo 表示输入不明显,就是输入密码12345的时候,不显示
echo -n "Enter your password to lock $TTY:"
read PASSWORD ##这里要输入正确的密码
clear
echo -n "Enter your password to unlock $TTY:"
while :
do
read RESPONSE
if [ "$RESPONSE" == "$PASSWORD" ];then
echo "unlocking"
break
fi
clear
echo "wrong passord and terminal is locked..."
echo -n "Enter your password to unlock $TTY:"
done
##stty echo 结束时,恢复明显

  • 测试:
    继续按下ctrl C也无法打断程序,除非输入正确的命令才可以解锁

(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_bash_12


(P7)shell编程入门第7讲:函数:字符串操作 ,一些内置命令:expr、shift、eval、trap等 ,Shell内置命令总结_字符串_13

4.Shell内置命令总结

内置命令

命令说明

echo

输出一行文本到标准输出设备

read

从标准输入设备读入数据

printf

格式化输出

declare

定义或创建变量或数组

let

让未定义的变量参与算数运算

expr

执行表达式

shift

把所有参数变量向下移动一个位置

eval

执行命令

trap

用来定义接收OS信号后而采取的动作

exit

退出SHELL程序

sleep

睡眠

test

条件测试




举报

相关推荐

0 条评论