shell函数

shell函数介绍及使用

孤街浪徒 提交于 2019-12-09 20:18:44
一、什么是函数? 在shell脚本中,函数类似Linux系统中的命令别名,可以简化程序的代码量,让程序 更易读、易改、易用。 简单地说,函数的作用就是将程序里多次被调用的相同代码组合起来(函数体),并为其取一个名字(即函数名),其他所有想重复调用这部分代码的地方都只需要调用这个名字就可以了。当需要修改这部分重复代码时,只需要改变函数体内的一份代码即可实现对所有调用的修改,也可以把函数独立地写到文件里,当需要调用函数时,再加载进来使用。 使用shell函数的优势如下: 把相同的程序段定义成函数,可以减少整个程序的代码量,提升开发效率; 增加程序的可读性、易读性,提升管理效率; 可以实现程序功能模块化,使得程序具备通用性(可移植性)。 二、shell函数的语法 (1)标准写法如下: function 函数名 ( ) { #推荐使用此格式,花括号里面写入的就是要执行的命令 return n } 2)简化写法如下: 函数名 ( ) { #不用function的方法 指令 .. . return n } 在shell函数的语法中,function表示声明一个函数,这部分可以省略不写。 三、shell函数的执行 shell的函数分为最基本的函数和可以传参的函数两种,其执行方式分别如下: (1)执行不带参数的函数时,直接输入函数名即可(注意不带小括号),格式如下: 函数名 有关执行函数的重要说明

Linux Shell的 & 、&& 、 ||

删除回忆录丶 提交于 2019-12-09 17:47:24
& 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作, 对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。 如: tianfang > run & [1] 11319 tianfang > 进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为 [1] 11319 例:[1]表示job ID是1,11319表示进程ID是11319。 切换到后台的进程,仍然可以用ps命令查看。 前后台间切换 可以通过bg <jobid>(background)和fg<jobid>(foreground)命令将其在前后台间状态切换。 守护进程 如果一个进程永远都是以后台方式启动,并且不能受到Shell退出影响而退出,一个正统的做法是将其创建为守护进程。守护进程值得是系统长期运行的后台进程,类似Windows服务。守护进程信息通过ps –a无法查看到,需要用到–x参数,当使用这条命令的时候,往往还附上-j参数以查看作业控制信息,其中TPGID一栏为-1就是守护进程。 tianfang > ps xj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 953 1190 1190 1190 ? -1

shell 脚本declare声明变量

二次信任 提交于 2019-12-09 17:39:50
linux bash shell之declare declare 或 typeset 内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令 declare 是bash版本2之后才有的。命令 typeset 也可以在ksh脚本中运行 。 declare/typeset 选项 -r 只读 #!/bin/bash declare -r haha=leaf echo $haha haha=what echo what is $haha ? 运行结果如下,可见声明后再也无法修改。 [root@mfsbackup mnt]# ./declare2.sh leaf ./declare2.sh: line 11: haha: readonly variable what is leaf ? -i 整形 #!/bin/bash declare -i num num=1 echo num="$num" num=2 echo num="$num" num=three echo num="$num" num=1 num=$num+1 echo num="$num" [root@mfsbackup mnt]# ./declare3.sh num=1 num=2 num=0 num=2 #!/bin/bash n=10/5 echo n=$n typeset

通过shell脚本 批量添加用户

北城以北 提交于 2019-12-09 13:34:15
有一个朋友问我如何批量创建用户和设置密码 ,我就简单给他写了两个 脚本 ,让他自己参考下并自己根据实际情况进行修改,毕竟他需要的用户名和密码都是实际生产环境的。 这里分两种情况,一种是测试for循环批量添加用户,一个是根据实际生产环境进行批量添加。分别写一下案例如下: for添加指定类型用户以及设置随机密码 脚本 作用:批量添加user1-10用户并设置随机8位数随机密码 #!/bin/bash #test add user and set passwd for n in `seq 10` do useradd user$n; echo user$n |passwd `echo user$n |md5sum |cut -c1-8` done 实际生产环境批量添加用户和设置对应密码 脚本作用:在生产环境中批量添加指定用户、设置对应密码,并禁止sudo -s、sudo -i切换到root。 思路:将所有要添加的用户名和密码放到一个数组中,设置一个函数进行截取用户名和密码并进行添加用户、设置密码。最后用一个循环调用这个函数即可添加。 #!/bin/bash #adduser and set passwd userlist=( user21:123456 user22:456789 user23:876543 ) function adduser_setpasswd_sudo(){

shell 随笔

╄→尐↘猪︶ㄣ 提交于 2019-12-09 12:26:05
Shell 变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了显式地直接赋值,还可以用语句给变量赋值,如: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将 /etc 下目录的文件名循环出来。 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I am good at ${skill

Linux中执行 .sh 的方法

故事扮演 提交于 2019-12-09 11:20:13
linux下执行.sh文件的方法 .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。 是bash脚本么 可以用touch test.sh #创建test.sh文件 vi test.sh #编辑test.sh文件 加入内容 #!/bin/bash mkdir test 保存退出。 chmod a+x test.sh #给test.sh可执行权限 如test,sh文件在 /home/work文件下 执行 方法一 本身目录下运行 进入 cd /home/workwen文件下 执行 ./test.sh 命令会在当前目录下创建一个“test”目录。 方法二 绝对路劲运行 执行 /home/work/test.sh 方法三 本身目录下运行 sh test.sh 最后建议:使用 C代码 1.man sh man sh 来看看sh 的介绍~ Linux.sh语法 介绍: 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编写脚本完成时,如果要执行该脚本,还必须使其可执行。 要使编写脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 注释 在进行shell编程时,以#开头的句子表示注释

Linux shell脚本

◇◆丶佛笑我妖孽 提交于 2019-12-08 20:39:29
1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。 2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示: 3 可以在shell脚本中使用哪些类型的变量? 答:在shell脚本,我们可以使用两种类型的变量: 系统定义变量 用户定义变量 系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“ set ”命令查看。 用户变量由系统用户来生成和定义,变量的值可以通过命令“ echo $<变量名> ”查看。 4 如何将标准输出和错误输出同时重定向到同一位置? 答:这里有两个方法来实现: 方法一: 2>&1 (# ls /usr/share/doc > out.txt 2>&1 ) 方法二: &> (# ls /usr/share/doc &> out.txt ) 5 shell脚本中“if”语法如何嵌套? 答:基础语法如下: 6 shell脚本中“$?”标记的用途是什么? 答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功

shell 文件操作大全 193条命令

霸气de小男生 提交于 2019-12-08 20:06:53
1.创建文件夹 #!/bin/sh mkdir -m 777 "%%1" 2.创建文件 #!/bin/sh touch "%%1" 3.删除文件 #!/bin/sh rm -if "%%1" 4.删除文件夹 #!/bin/sh rm -rf "%%1" 5.删除一个目录下所有的文件夹 #!/bin/bash direc="%%1" #$(pwd) for dir2del in $direc/* ; do if [ -d $dir2del ]; then rm -rf $dir2del fi done 6.清空文件夹 #!/bin/bash direc="%%1" #$(pwd) rm -if $direc/* for dir2del in $direc/* ; do if [ -d $dir2del ]; then rm -rf $dir2del fi done 7.读取文件 #!/bin/sh 7.1.操作系统默认编码 cat "%%1" | while read line; do echo $line; done 7.2.UTF-8编码 cat "%%1" | while read line; do echo $line; done 7.3.分块读取 cat "%%1" | while read line; do echo $line; done 8.写入文件 #!/bin

shell

时光毁灭记忆、已成空白 提交于 2019-12-08 09:28:30
当前目录所有目录中的文件 ls -R 显示目录和文件,目录后带/ ls -F 递归复制整个文件夹 cp -R 重命名文件 mv node.sh note.sh 硬连接会保留数据,软连接会直接无效 cp -l # 硬连接 cp -s # 软连接 创建目录 mkdir dir 查看文件内容 -n所有行号 -b带文本的行号 cat 其他查看文件的方法 more less 显示开头和结尾 可以带 -n 显示n行 head tail 显示进程 ps 实时进程控制 top 停止进程 kill 查看磁盘空间 -c 显示总用量 -h 以可读形式显示 df 对文件内容进行排序 -n 数字识别为数字 -M 按月份排序 sort file -n 查看全局变量 printenv 设置本地变量,然后导出,就可以变为全局变量 导出后不用再使用$符号 var=100 export var 删除环境变量 unset var 定义数组 myArr=(1 2 3 4) 通用显示 echo ${myArr[0]} 只能显示第一个 echo $myArr 显示所有数据 echo ${myArr[*]} unset 对数组也有效 查看别名 alias -p 创建别名 alias vim='vi' 用户操作 useradd usermod userdel 修改权限 u 表示用户 o 表示其他任何人 g 表示用户组 a

php 执行shell命令的函数

北慕城南 提交于 2019-12-07 16:36:50
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。   在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。比如前二天笔者在批量处理.rar文件时exec就帮我了大忙了。   今天整理一下常用的调用系统函数发出来和大家分享经验。   注意:要想使用这二个函数php.ini中的安全模式必须关闭,要不然为了安全起见php是不让调用系统命令的。   先看一下php手册对这二个函数的解释:   exec --- 执行外部程式   语法 : string exec ( string command [, array &output [, int &return_var]] )   说明 :   exec( )执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。   如果有给予参数array,则指定的数组将会被命令所输出的每一行填满,注意 : 如果数组先前已经包含了一些元素的话,exec( )将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给exec( )之前呼叫unset( )。