首页 > 系统相关 >shell 自加自减/函数调用/sleep/vim 替换

shell 自加自减/函数调用/sleep/vim 替换

时间:2022-12-26 14:36:27浏览次数:40  
标签:shell return vivian sky 函数调用 echo num vim 替换

1、shell 自加自减

shell中 自加的写法
((x++))
或者((x+=1))
减法同理
((x--))
或者((x-=1))

使用变量

a=1
a=$(($a+1))
a=$[$a+1]
a=`expr $a + 1`

还有一个办法,let

$let x=x+1
$let x=x-1

返回值问题:


  1. ((expression))
  2.               The  expression  is  evaluated according to the rules described
  3.               below under ARITHMETIC EVALUATION.  If the value of the expres-
  4.               sion  is non-zero, the return status is 0; otherwise the return
  5.               status is 1.  This is exactly equivalent to let "expression".

2、函数调用

Linux Shell中函数的基本形式


   

{












command1












command2























commandN


语法:

[ function ] funname [()]

{

    action;

    [return int;]

}

说明:

1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

BASH 中函数参数的定义并不需要在函数定义处就制定,而只需要在函数被调用时用 BASH 的保留变量 $1 $2 ... 来引用就可以了;BASH 的返回值可以用 return 语句来指定返回一个特定的整数,如果没有 return 语句显式的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为 0,如果执行失败返回错误码)。函数的返回值在调用该函数的程序体中通过 $? 保留字来获得。

用例1:

1 #1/bin/bash
2
3 function Sum()
4 {
5 echo $1,$2
6 return $(($1+$2))
7 }
8 Sum 1 2
9 echo $?

Loong:/home/yee/shell# sh -x func1.sh


+ Sum 1 2


+ echo 1,2


1,2


+ return 3                命令的返回值


+ echo 3


3                           $? 打印出上一条命令的返回值;


Loong:/home/yee/shell#


函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。函数是一个命令,在shell获得命令返回值,都需要通过$?获得

用例2:

1 #1/bin/bash
2
3 declare num=10
4 function Sum()
5 {
6 echo $num
7 ((num++))
8 return $num
9 }
10 Sum
11 function Sub()
12 {
13 local num=100
14 echo $num
15 ((num-=4 ))
16 return $num
17 }
18 Sub
19 echo $num
Loong:/home/yee/shell# sh -x func1.sh 
+ declare num=10 全局变量
+ Sum
+ echo 10
10
+ (( num++ ))
+ return 11
+ Sub
+ local num=100 使用local自定义局部变量值,与外部变量无关
+ echo 100
100
+ (( num-=4 ))
+ return 96
+ echo 11 与局部变量无关
11
Loong:/home/yee/shell#

如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。


如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值

附系统变量:(是整个程序,而不是程序内部)

        $0 这个程序的执行名字
  $n  这个程序的第n个参数值,n=1...9
  $*  这个程序的所有参数
  $# 这个程序的参数个数
  $$ 这个程序的PID
  $! 执行上一个背景指令的PID
  $? 上一个指令的返回值

1 #1/bin/bash
2
3 function Sum()
4 {
5 echo $1,$2
6 return $(($1+$2))
7 }
8 Sum 3 4
9 echo $0
10 echo $2
11 echo $*
12 echo $#
13 echo $$
14 echo $!
15 echo $?

Loong:/home/yee/shell# sh func1.sh

                  

参数为空

3,4       sum函数的echo值


func1.sh  

程序的执行名字                   




0            

参数个数


360       

程序的PID



0          

上一个指令的返回值


Loong:/home/yee/shell#





函数递归


LinuxShell中可以递归调用函数,即函数可以直接或间接调用其自身。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。一个递归调用的例子:
function12.sh演示了一个函数递归调用

#!/bin/bash




















#递归调用函数


















foo()


















{

































































































#调用函数


使用局部变量进行递归一般是针对数值运行来使用的。阶乘运算是一个使用局部变量的递归调用过程,实现了n!的运算,其可以通过下面的公式表示:


n!=1  




(n=0)













n!=n*(n-1)!


(n>=1)


按照该公式可实现对阶乘的运算,由于该阶乘运算中存在终止条件“0!=1”,所以可以使用函数递归来实现该运算。


#function13.sh




#!/bin/bash







fact ()




{





}








fact $1




echo "Factorial of $1 is $?"



exit 0

3.sleep

NAME
       sleep - delay for a specified amount of time

SYNOPSIS
       sleep NUMBER[SUFFIX]...
       sleep OPTION

DESCRIPTION
       Pause for NUMBER seconds.  SUFFIX may be `s' for seconds (the default), `m' for minutes, `h'
       for hours or `d' for days.  Unlike most implementations that require NUMBER be  an  integer,
       here  NUMBER  may be an arbitrary floating point number.  Given two or more arguments, pause
       for the amount of time specified by the sum of their values.

停留设定的秒数,参数后缀可以是默认的以秒为单位,也可以是以m,h,d依次为分钟,小时,天为单位;不是要求每个数字都要求为整形,也可以是

浮点型的;超过两个以上的参数,会以它们的和作为执行结果;

Dos: 
sleep(1); //停留1秒 
delay(100); //停留100毫秒   
Windows: 
Sleep(100); //停留100毫秒 
Linux: 
sleep(1); //停留1秒 
usleep(1000); //停留1毫秒

Sleep(n)//n毫秒

1.4 vim 替换

vi/vim 中可以使用 :s 命令来替换字符串

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

举例:

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:2,$s/vivian/sky/g 替换第 2 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/












标签:shell,return,vivian,sky,函数调用,echo,num,vim,替换
From: https://blog.51cto.com/u_15797945/5968875

相关文章

  • shell 脚本:根据ip地址,子网掩码,计算子网
    #!/bin/bashget_ipgate(){#获取ip地址ip=$(echo$1|cut-d'/'-f1)#获取子网掩码mask=$(echo$1|cut-d'/'-f2)#获取主机位((mymask=32-mask))#ip地址......
  • mongodb shell设置
    [root@host-172-16-13-179~]#cat/root/.mongorc.jshost=db.serverStatus().host;cmdCount=1;prompt=function(){returndb+"@"+host+""+(cmdCount++)+">";}func......
  • linux中shell变量$#,$@,$0,$1,$2的含义解释
    linux中shell变量$#,$@,$0,$1,$2的含义解释:变量说明:$$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set......
  • 如何把一个 Shell 脚本打包成一个 macOS 桌面 App All In One
    如何把一个Shell脚本打包成一个macOS桌面AppAllInOne如何把一个shell脚本可执行文件转换成一个macOS可以直接运行的App#!/bin/bash#执行Chrome.app#......
  • MAUI新生6.1-Shell导航视觉层次结构
    一、Shell介绍MAUI内置了一套导航框架Shell,主要提供了三类功能:视觉层次结构、路由导航、搜索框。其中视觉层次结构从文字上不是很好理解,可以认为是一套导航菜单系统,具有一......
  • linux与shell 3.bash shell基础
    通配符符号含义?任意单个字符*0个或多个字符[ay]a或y[a-y]a,b,c,...,y[!a]排除a例:$touchfallfellfullfill$ls-lf[!a]llfellful......
  • neovim 插件管理
    起因是使用了很久vscode的插件,但是在前几天看到了一个neovim(以下简称nvim)的视频。就看自己的vscode不是很顺眼,感觉界面不够简洁,所以尝试使用nvim。这期间尝试了别人的配......
  • ShellCheck是一个静态分析工具
    ShellCheck的功能众所周知, 终端是Linux系统不可分割的一部分 以及我们在航站楼所做的一切背后, 有一个外壳,一个与操作系统本身交互的程序。我们在终端中输入的每个命令最......
  • CMFCShellList和自定义ShellList结合使用,达到“直接浏览缩略图,双击打开图片”...
    在GOPaint的设计研究过程中,我一直希望能够实现这样的结果(ABC3个步骤)在我之前的博客里面,曾经有过缩略图显示的现就,也应用到了实际的项目中。但是现在过了一......
  • Microsoft 365开发:如何通过PnP PowerShell禁用Social bar
    Blog链接:​​​https://blog.51cto.com/13969817​​我们都知道所有Communications和Teams网站的页面底部都有一个Socialbar,在该SocialBar中,用户可以对页面进行点赞、查......