shell函数

Linux Shell——函数的使用

匆匆过客 提交于 2019-12-24 04:33:53
文/一介书生,一枚码农。 scripts are for lazy people. 函数是存在内存里的一组代码的命名的元素。函数创建于脚本运行环境之中,并且可以执行。 函数的语法结构为: function <function-name> { <code to execute> } 创建函数不需要 do 或 done 这些关键字,只需要大括号来界定函数的作用范围。 我们可以在命令行中创建一个简单的函数: function show_system { echo "The uptime is:" uptime echo echo "Current dir:" pwd echo echo "Date:" date } 在命令行定义上面的函数: 然后执行函数: 最后,我们可以使用 type 命令查看函数的定义: 方法可以有传递的参数。在此之前,我们先简单介绍 sed 命令,下面的脚本用来移除文件中的注释行和空白行。 sed -i.bak '/^\s*#/d;/^$/d' <filename> 详细介绍一下上面的脚本: sed -i.bak :sed 命令会创建一个以 .bak 结尾的备份文件,用来备份原始的文件。 /^ :表示行首。 \s* :匹配任何不可见字符,包括空格、制表符、换页符等。 #/ :shell 脚本中的注释标记。 /^\s*#/

Linux Shell——流程控制

南楼画角 提交于 2019-12-24 04:33:27
一. 创建交互式脚本 使用 echo命令的选项 关于各种命令的使用,可以使用 man 命令 来查看命令的详细用法介绍。例如,我想看下 echo 的用法和各种选项。可以执行 man echo 。执行结果如下: 如果单独执行 echo 命令,就会打印出一个空白行。 默认情况下,echo 都会换行,如果不想换行的话,可以使用下面两种方式的一种。 echo -n "Which directory do you want to use? " echo -e "Which directory do you want to use? \c" 使用 read 命令 如果我们需要读入用户输入的参数时,可以使用 read 命令,当然还可以从文件系统等读入信息。 我们建立一个新的脚本文件 hello3.sh。 #!/bin/bash echo -n "Hello I $(basename $0) may I ask your name: " read echo "Hello $REPLY" exit 0 执行此脚本时,首先提示需要输入,然后输入的内容, REPLY 当没有给 read 提供参数时设置,最后打印出来。 执行结果为: 优化 read 提示的脚本 在前面的例子中,我们使用了 echo -n 的方式来阻止信息换行,其实 read 命令也带了一个选项来实现相同的功能: read -p "Enter

shell面试题总结

痞子三分冷 提交于 2019-12-24 04:33:03
1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash echo $1 (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。) 2) 如何在脚本中使用参数 ? 第一个参数 : $1,第二个参数 : $2 例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ./copy.sh file1.txt /tmp/ cat copy.sh #!/bin/bash cp $1 $2 3) 如何计算传递进来的参数 ? $# 4) 如何在脚本中获取脚本名称 ? $0 5) 如何检查之前的命令是否运行成功 ? $? 6) 如何获取文件的最后一行 ? tail-1 7) 如何获取文件的第一行 ? head-1 8) 如何获取一个文件每一行的第三个元素 ? awk'{print $3}' 9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素 awk'{ if ($1 == "FIND") print $2}' 10) 如何调试 bash 脚本 将 -xv 参数加到 #!/bin/bash 后 例子: #!/bin/bash –xv 11) 举例如何写一个函数 ? function example { echo "Hello world!" } 12)

linux 下 .sh 文件语法

有些话、适合烂在心里 提交于 2019-12-24 04:31:55
转自:http://blog.sina.com.cn/s/blog_54f82cc201010hfz.html 介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 2 注释 在进行shell编程时, 以#开头的句子表示注释,直到这一行的结束 。我们真诚地建议您在程序中使用注释。 如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a=”hello world” # 现在打印变量a的内容: echo “A is:” echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo “this is the $numnd” 这并不会打印出”this is the 2nd”,而仅仅打印”this is the “

sh_脚本语法

℡╲_俬逩灬. 提交于 2019-12-24 04:31:38
介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a=”hello world” # 现在打印变量a的内容: echo “A is:” echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo “this is the $numnd” 这并不会打印出”this is the 2nd”,而仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo

php 安全基础 附录B. 函数

蹲街弑〆低调 提交于 2019-12-24 00:52:00
附录B. 函数 在我写作本书的时候,http://php.net/quickref.php列出了共3917个函数,其中包括一些类似函数的语法结构,在此我不准备把它们从函数中区分开来,而是把它作为函数看待。 由于函数数量很大,一一说明它们的正确及安全用法是不太可能的。在此我选出了我认为最需要注意的函数。选择的标准包括使用的频繁度、使用时的危险(安全)度及我本人的经验。 对于每一个列出的函数,我都会提供推荐的使用方法。在提出这些方法时,我会把安全作为重点考虑。请在实际使用时根据你的需求进行相应调整。 当一个函数与另一个有相同的风险时,我会给出参见另一个函数的信息,而不是多余地再次描述一遍。 B.1. eval( ) eval( )函数用于对一个字符串以PHP语句方式解析运行。如: <?php $name = 'Chris'; $string = 'echo "Hello, $name";'; eval($string); ?> 上例中会把$string作为PHP语句来运行,因此等价于: <?php $name = 'Chris'; echo "Hello, $name"; ?> 虽然eval( )非常有用,但是当使用了被污染数据时会非常危险。例如,在下例中,如果$name是被污染的,攻击者可以任意运行PHP代码: <?php $name = $_GET['name']; eval(

shell编程入门(2)

你离开我真会死。 提交于 2019-12-24 00:31:12
shell的结构分为三大类:顺序结构、分支结构和循环结构 1. if语句 语法格式: if <语句序列A> then <语句序列B> fi 如果语句序列A中的最后一个命令的返回值为0,则执行语句序列B中的命令,然后继续执行fi以后的命令;如果语句序列A中的最后一个命令的返回值为非0,则跳转到fi并且继续执行fi以后的命令, 注意,在这里A执行结果为0认为是真 。 if test –f funfilethen echo funfile exists fi if [ -f funfile ]; then echo funfile exists echo hello fi 2. if-else语句 语法格式: if 语句序列A then 语句序列B else 语句序列C fi 如果语句序列A中的最后一个命令的返回值为0,则执行语句序列B中的命令,然后继续执行fi以后的命令;如果语句序列A中的最后一个命令的返回值为非0,则执行语句序列C中的命令,然后继续执行fi以后的命令。 任何命令的返回值都可以作为判断条件,也可以嵌套if语句,但必须保证if 和 fi配对。 if [ “$X” –lt 10 ]; then echo X is less than 10 else if [ “$X” –gt 10 ]; then echo X is greater than 10 else echo X

linux shell set命令

老子叫甜甜 提交于 2019-12-23 18:17:00
Linux set命令用于设置shell。 set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。 语法 set [+-abCdefhHklmnpPtuvx] 参数说明 : -a  标示已修改的变量,以供输出至环境变量。 -b  使被中止的后台程序立刻回报执行状态。 -C  转向所产生的文件无法覆盖已存在的文件。 -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e  若指令传回值不等于0,则立即退出shell。 -f   取消使用通配符。 -h  自动记录函数的所在位置。 -H Shell  可利用"!"加<指令编号>的方式来执行history中记录的指令。 -k  指令所给的参数都会被视为此指令的环境变量。 -l  记录for循环的变量名称。 -m  使用监视模式。 -n  只读取指令,而不实际执行。 -p  启动优先顺序模式。 -P  启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t  执行完随后的指令,即退出shell。 -u  当执行时使用到未定义过的变量,则显示错误信息。 -v  显示shell所读取的输入值。 -x  执行指令后,会先显示该指令及所下的参数。 +<参数>  取消某个set曾启动的参数。 来源: https://www.cnblogs.com/wangym/p

大数据学习——shell编程

此生再无相见时 提交于 2019-12-22 13:05:32
2.1 基本格式 代码写在普通文本文件中,通常以 .sh 为后缀名 vi hello.sh #!/bin/bash ## 表示用哪一种 shell 解析器来解析执行我们的这个脚本程序 echo "hello world" ## 注释也可以写在这里 ## 这是一行注释 执行脚本 sh hello.sh 或给脚本添加 x 权限,直接执行 chmod 755 hello.sh ./hello.sh 2.2 基本语法 2.2.1 系统变量 Linux Shell 中的变量分为“系统变量”和“用户自定义变量” 可以通过 set 命令查看系统变量 系统变量: $HOME 、 $PWD 、 $SHELL 、 $USER 等等 2.2.2 自定义变量 1 、语法 变量=值 (例如 STR=abc ) 等号两侧不能有空格 变量名称一般习惯为大写 使用变量: $arg 双引号和单引号有区别, 双引号仅将空格脱意, 单引号会将变量引用比如 $param 脱意 2 、示例 STR="hello world" A=9 echo $A echo $STR 如果想打印 hello worlds is greater 怎么办? echo $STRs is greate 行吗? 不行,正确写法是: echo ${ STR}s is greate unset A 撤销变量 A readonly B=2 声明静态的变量

shell脚本变量

和自甴很熟 提交于 2019-12-22 09:50:13
既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值。 自定义变量 shell变量不需要声明,随用随定义,给变量赋值的时候要注意 shell是空格敏感的 使用 {} 确定变量的范围是个好习惯 $NEWENV =123 #等号前面有空格,不行 NEWENV: command not found $NEWENV= 123 #等号后面有空格,不行 123: command not found $NEWENV=123 #RIGHT $BRACE=123 $echo $BRACEEEE $echo ${BRACE}EEE 123EEE 位置变量 指shell脚本的命令参数,shell script将执行的命令放在存储在 0 ,命令之后的参数依次存储在 1 , 2 ...,可以通过取值(eg $0 )利用这些变量,就可以编写带参数的脚本,当参数值大于9时,需要使用{}括起来,否则 $10 就相当于在 $1 之后加了字符 0 。注意,定义函数的参数列表也使用 $1 , $2 etc,注意与命令行的参数相区分,函数内的 $1 etc是用来传参的,但 $0 还是保持原来的含义 $cat ./shell.sh #!/bin/bash echo "$10" echo "${10}" $./*.sh 11 22 33 44 55 66 77 88 99 00