shell脚本中函数的使用

shell脚本中函数的使用

 定位文件格式:  ./pathname/filename
 文件载入: . /filename
 此即 <点><空格><斜线><文件名>
 使用set命令确保函数的载入。set命令将在shell中显示所有的载入函数。
 执行shell函数,简单地的键入函数名即可。
 对函数做些修改。首先删除函数,使其对shell不可利用。使用unset命令完成。
 在脚本中调用函数,首先创建函数,并确保它位于调用之前
 
 
 函数测试 func2脚本
  #!/bin/sh
char_name()
{
 _Letters_Only=$1
 _Letters_Only=`echo $1|awk '{if($0~/[^a-zA-X]/) print "1"}'`
if [ "$_Letters_Only" != "" ]
 then
  return 1
 else
  return 0
fi
}

name_error()
{
  echo "$@ contains errors ,it ,must contain only letters"
}

while :
do
 echo -n "what is your first name :"
read F_Name
 if char_name $F_Name
then
 break
else
 name_error $F_Name
fi
done

while :
do
echo -n "what is your surname :"
read S_Name
if char_name $S_Name
then
break
else
name_error $_Name
fi
done

2、字符串大写函数 str_to_upper 脚本
 #!/bin/sh
str_to_upper()
{
 _str=$1
if [ $# -ne 1 ]; then
echo "number_file: I need a string to convert please "
return 1
fi
echo $@ | tr '[a-z]' '[A-Z]'
}

3、列出文本文件的行号  number_file脚本
#!/bin/sh
number_file()
{
 _Filename=$1
 if [ $# -ne 1 ]; then
  echo "number_file: I need a filename to number"
  return 1
 fi
loop =1
 while read Line
 do
   echo "$loop :$Line"
   loop=`expr $loop + 1 `
 done <$_Filename
}  

4、判断字符串是否为大写 is_upper脚本
#!/bin/sh
is_upper()
{
  if [ $# -ne 1 ]; then
  echo "is_upper:I need a string to test OK"
  return 1
  fi

_Is_Upper=`echo $1|awk '{if($0~/[^A-Z]/) print "1"}'`
if [ "$_Is_Upper" != "" ]
then
  return 1
else
 return 0
fi
}
echo  -n "Enter the filename :"
read FileName
if is_upper $FileName ; then
 echo "Great it's upper case"
else
 echo "Sorry it's not upper case"
fi
要测试字符串是否为小写,只需要在is_upper中替换相应的awk语句即可。此为
is_lower
_Is_Lower=`echo $1|awk '{if($0~/[^a-z]/) print "1"}'`

5、 测试字符串长度 check_length脚本
#!/bin/sh
check_length()
{
_str=$1
_max=$2
if [ $# -ne 2 ]; then
 echo "check_length; I need a string and max length the string should be "
 return 1
fi
#check the length of the string
_Length=`echo $_str|awk '{print length($0)}'`
if [ "$_Length" -gt "$_max" ]; then
return  1
else
 return 0
fi
}
while :
do
echo "Enter your First name :"
read Name
if check_length $Name 10
then
break
else
echo "The name field is too long 10 charater max "
fi
done
使用wc命令接收键盘操作输入时有一个误操作。如果用户输入一个名字后,点击了几次空格键
wc也将这些空格作为字符串的一部分。因而给出其错误的长度。awk在读取键盘时缺省截去字符串末尾处空格。

6、chop函数删除字符串前面的字符 chop脚本
#!/bin/sh
chop ()
{
  # to call: chop string how_many_charts_to_chop
  _str=$1
  _chop=$2
  chop=`expr $_chop + 1 `
 if [ $# -ne 2 ]; then
 echo  "check_length : I need  a string and how manay characters to chop "
 return 1
 fi
_Length=`echo $_str|awk '{print length($0)}'`
if [ "$_Length" -lt "$_chop" ]; then
echo "sorry you have asked to chop more characters than there ara in the string "
return 1
fi
echo $_str |awk '{print substr($1,'$_chop')}'
}
 
 
  
 

分割
以符号+为准,将字符分割为左右两部分
使用sed
举例:
命令 date --rfc-3339 seconds 的输出为
2007-04-14 15:09:47+08:00
取其+左边的部分
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
输出为
2007-04-14 15:09:47
+右边的部分
date --rfc-3339 seconds | sed 's/.*+//g'
输出为
08:00

以空格为分割符的字符串分割
使用awk
举例:
STR_FRUIT="Banana 0.89 100"
取第3字段
echo $STR_FRUIT | awk '{ print $3; }'

 

 

sed 's/:.*//' main.7   删除第一个冒号后边的所有东西

 

sed 's/Tolstoy/Campus/g' < example.txt    Campus 代替Tolstoy

cut -d : -f 1,3,5 main.4   剪切第13,5个数据

awk ' { print $9 }' main.7

 

可以用 bash 的内建变量扩展, ex

user@minix-nb:~$ cat a

#! /bin/bash

bank_code="123456"

string2="abc001"

another="$bank_code$string2"

length=${#bank_code}

mycut=${another:$length}

echo "$mycut"

 

user@minix-nb:~$ ./a

abc001

 

user@minix-nb:~$ cat a

#! /bin/bash

bank_code="123456"

string2="abc00100912_edf"

another="$bank_code$string2"

length=${#bank_code}

mycut=${another:$length}

echo "$mycut"

user@minix-nb:~$ ./a

abc00100912_edf

 

$mycut 是变量扩展, 参阅 bash 在线手册 , ${var:offset:length}

 

用冒号分割字符echo "12:23:55.345" | awk -F ':' '{print $1"  "$2"  "$3}'

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值