shell函数

Shell脚本的执行方式详解

泪湿孤枕 提交于 2019-11-28 13:27:39
当Shell脚本运行时,它会先查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常是/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc等),在加载了上述环境变量文件后,Shell就开始执行Shell脚本中的内容。 Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。 通常情况下,在执行Shell脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子Shell脚本,基本流程如图: Shell脚本的执行通常可以采用以下几种方式。 1)bash script-name或sh script-name:这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法; 2)path/script-name或./script-name:指在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限先改为可执行(即文件权限属性加x位),具体方法为chmod+x script-name。然后通过脚本绝对路径或相对路径就可以直接执行脚本了; 3)source script-name或

常用的Shell脚本

让人想犯罪 __ 提交于 2019-11-28 13:26:53
1、通过位置变量创建linux系统账户及密码 $1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 1 #!/bin/bash 2 # Author: Peter zh 3 # Blog: https://home.cnblogs.com/zhangwduoduoj/ 4 # Time: 2019-08-17 19:19:45 5 # Name: userad.sh 6 # Version: v1.0 7 # Description: This is a Script. 8 9 `useradd $1` 10 echo "$2" |passwd --stdin "$1" 2、每周5使用tar命令备份/var/log 下的所有日志文件,防止文件覆盖 vim backup.sh tar zcfP /tmp/varlog_$(date +%F).tar.gz /var/log crontab -e * * * * 5 bin/bash /server/scripts/backup.sh 3、实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根分区剩余空间小于1000M的时候发送报警邮件 1 #!/bin/bash 2 # Author: Peter zh 3 # Blog: https://home.cnblogs.com/zhangwduoduoj/ 4 # Time:

【shell脚本】$ 在shell脚本中的使用

戏子无情 提交于 2019-11-28 13:26:40
shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。 例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或函数的所有参数 $? 上个命令的退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数 #! /bin/bash echo "file name $0" echo "first param $1" echo "pid $$" echo "total num of param $#" echo "last status $?" echo "$@" echo "$*" 执行 ./1.sh hello mayuan file name ./1.sh first param hello pid

shell脚本编程高级篇

喜夏-厌秋 提交于 2019-11-28 13:05:11
SHELL脚本编程进阶 循环执行:简单来说就是把一些指令重复循环。 循环代码具体的指令有三种: for , while , until其中for, while用的最多。 for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询。 for循环语法:在shell编程中 for,in,do,done。这些都是他的关键字,其中循环的指零就放在do和done之间。 WORDS决定了循环次数。 循环的次数由in 后面跟的WORDS(字符串)的数量决定。字符串的个数决定了do和done之间的指令执行的次数。 $ :for认为是一个整体 br/>$@:for认为是独立的参数 for循环逻辑:↓↓ :这条命令意思是,将i变量为1 22 33 等于说i同时等于这3个变量然后用到$i把变量显示出来第一次i就是1第二次i就是22第三次i就是333这就是for循环的逻辑。 :还可以使用花括号或字母一次性显示完。 for脚本编辑语法:,脚本意思是i变量为arg而$@是独立的一个整体执行为脚本后面跟123代表arg is 独立的123。 :这是重复创建10次用户的意思i变量为{1..10}这个范围 :这是让FILE变量为userlist.txt这个文件然后执行这个文件里有多少用户,在来循环多少次。 :不用创建脚本也可以在外执行for结尾必须使用;隔开done

学习笔记5

女生的网名这么多〃 提交于 2019-11-28 12:33:11
一网络配置 1.将Linux主机接入到网络,需要配置网络相关设置 主机名 IP/netmask 路由:默认网关 DNS服务器 2.网络配置命令 配置网络接口 ifconfig命令 ifconfig [interface] ifconfig -a ifconfig IFACE [up|down] 路由管理命令 route 命令 查看:route -n 添加:route add 删除:route del 显示网络连接 netstat命令 -t: tcp协议相关 -u: udp协议相关 -w: raw socket相关 -l: 处于监听状态 -a: 所有状态 -n: 以数字显示IP和端口 -e:扩展格式 -p: 显示相关进程及PID 配置Linux网络属性:ip 命令 ip addr { add | del } IFADDR dev STRING [label LABEL]:添加地址时指明网卡别名 [scope {global|link|host}]:指明作用域 global: 全局可用 link: 仅链接可用 host: 本机可用 添加路由:ip route add 主机路由:IP 网络路由:NETWORK/MASK 添加网关:ip route add default via GW dev IFACE 删除路由:ip route del TARGET 显示路由:ip route

shell脚本编写守则

你。 提交于 2019-11-28 12:25:03
现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS Linux release 7.5.1804 (Core) #我这里使用的是centos 7.5 1804 [root@localhost ~]# bash --version #查看bash的版本 GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) #这一行就是bash版本 Copyright (C) 2011 Free Software Foundation, Inc. 许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html> 这是自由软件,您可以自由地更改和重新发布。 在法律允许的范围内没有担保. 若生产环境下的服务器使用的是较老版本的系统及shell,那么建议将其升级到最新版的shell,因为近两年老版本被暴露出存在较严重的安全漏洞。 bash软件曾经爆出了严重漏洞(破壳漏洞),凭借此漏洞,别人可能会接管计算机的整个操作系统,得以访问各种系统内的机密信息,并对系统进行更改等。任何人的计算机系统,如果使用了bash软件,都需要立即打上补丁

shell - case 流程控制

﹥>﹥吖頭↗ 提交于 2019-11-28 10:53:34
case 实现程序流程的选择,循环 # 服务的脚本启动和停止 ---- case 的应用场景 case variables in variables 1) order 1;; variables 2) order 2;; variables 3) order 3;; *) no matches esac # 注意 if不能同时判断用户输入为 1 或者是 backup  # 使用case 判断用户输入,注意结尾用 ;; #!/usr/bin/bash cat <<eof #################### 1. backup 2. copy 3. quit #################### eof read -p "please enter [1|2|3]:" re case $re in 1|backup) # 这里可以同时判断输入的是1还是backup , 区别于if 判断 echo "backup";; 2|copy) echo "copy";; 3|quit) echo "quit" && exit;; *) echo "attention your input!!!" echo "USAGE: $0 {1|2|3}" esac 一个rsync 的启动和停止的脚本 # 注意脚本名 不能用rsync , 这样取进程号的时候才不会取出多个 1. 如何启动命令

shell - 函数和数组

无人久伴 提交于 2019-11-28 10:53:28
函数 # 函数定义的方式 函数名(){ # 注意这里有空格 commands } function 函数名{ commands } # 使用$1, $2, $3方式传参 func(){ echo "hello $1"} # 调用 func lily func2(){ echo "hello $*"} # 传多个参数 func2 lili clerk mephy # 注意函数传参和脚本传参不一样 num=$1 # 就需要外部传参 # 函数的返回值 return 只能返回 1-255的整数 echo 返回字符串 return 1 # $? 结果为1 数组 数组可以存多个值,根据下标输出值 tt=(aa bb cc dd ) echo ${tt} # 输出第一个 echo ${tt[@]} ${tt[*]} # 都是输出全部 echo ${!tt[*]} # 输出下标 # 普通数组 VS 关联数组 普通数组 tt=(linux windows shell) # 下标只能是整数 关联数组 info=([name]=clerk [age]=18 [gender]=female ) 取值: info[name] # 定义关联数组 declare -A info info=([name]=clerk [age]=18 [gender]=female ) # 取值 echo ${info[age]

shell脚本-题

家住魔仙堡 提交于 2019-11-28 10:26:06
1:用source执行脚本和用bash执行Shell脚本的区别是什么?   source 执行脚本,其中的变量赋值是在当前shell的 ; bash 执行脚本,其中的shell是在下一级的bash的所以,这个变量值,并不在当前shell中, 而是在 子 shell中 2:如何自定义环境变量?   环境变量在 /etc/profile 或者 ~/.protfile 文件中定义 ,使用 export 参数来定义环境变量同时,使用source或.命令让其生效。 3:定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?应该怎么用?   单引号表示输入是什么,显示的就是什么(单引号将剥夺其中的所有字符的特殊含义)   双引号为固定字符串,解决空格问题   反引号表示输出的是命令执行的结构,同 $() 4:请分别说出2个以上用于整数运算特殊符号或命令,以及适合小数运算的命令。   整数: + - let   小数: bc awk / 5:写出特殊变量对应的意义及应用   $0、$n、$#、$*、$@、$?、$$、$!、$_   $0 脚本名字   $n $1,$2...${10}   $* 所有变量--字符串显示   $@ 所有变量--列表形式   $? 执行上一个指令的返回值的状态   $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)   $$

shell编程(2)

喜夏-厌秋 提交于 2019-11-28 10:15:23
1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 10. 退出状态 11. shell表达式与运算符 11.1 条件表达式 11.2 整数比较符 11.3 字符串比较符 11.4 文件测试 11.5 布尔运算符 11.6 逻辑判断符 11.7 整数运算 11.8 其他运算工具 11.9 shell括号用途总结 shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。 在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。 这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。 定义变量 Shell 支持以下三种定义变量的方式: variable=value variable='value' variable="value" variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果 value