shell脚本

shell小记

拟墨画扇 提交于 2019-12-01 22:52:31
shell脚本要求unix换行格式。在win上写好shell后,需先用dos2unix转换过文件才能执行 if语法片段 ENV= if [ "$1" == "ONLINE" ]; then   ENV=$1 else   ENV="TEST" fi 或者 gid=50 if ((i<7)); then   gid=1; elif ((i<13)); then   gid=2; fi    for语法片段 1)、for 字符遍历的语法 for ((area=1; area<=1; ++area)); do $area ....干啥干啥 done 2)、for in的语法 for file in `ls` do sed -i "s/mydir/$filename/g" $file newfile=`echo $file | sed "s/mydir/$filename/g"` mv $file $newfile done    数组小例 1)、数值范例 varpos=(4 5 6 10 11 12 13 14) for ((i=1; i<=8; ++i)); do items=$(((i+1)*10)) pos=${varpos[$i-1]} $pos ..$items...干啥干啥 done 2)、取数值长度 for ((i=0;i<${#varpos[@]};i++))   

shell编程:有类型的变量

走远了吗. 提交于 2019-12-01 22:18:33
1、通过 declare 和 typeset 命令 declare 和 typeset 两者等价 declare 和 typeset 都是用来定义变量类型的 下面以 declare 进行总结 2、declare 参数如下 -r 将变量设置为只读 -i 将变量设置为整数 -a 将变量设置为数组 -F 显示此脚本前定义过的所有函数及内容 -f 仅显示此脚本前定义过的函数名 -x 将变量声明为环境变量 3、举例: 例1: 声明为不可变形式, declare -r   $ var=hello   $ var=world   $ echo $var   打印出:world // 说明 var是可变的   $ declare -r var=hello   $ var=world     打印结果:-bash: var: 只读变量 例2:声明为整型, declare -i   $ num=10   $ num2=$num+20   $ echo $num2   打印出:10+20   $ expr $num + 20   打印出:30      $ num=10   $ declare -i num3   $ num3=$num+90   $ echo $num3   打印出:100 例3:显示出系统中定义的 函数名及函数体   $ declare -F 例4:

shell中的shift左移参数命令

血红的双手。 提交于 2019-12-01 22:08:31
  shift命令用于对参数的向左移动, 通常用于在不知道传入参数个数的情况下依次遍历每个参数,然后进行相应的处理(常见与Linux中各种程序的启动脚本)。 在扫描处理脚本程序的参数时,经常要用到shift命令。   shift命令每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数不再可用。    注意:$#表示脚本后跟随的参数总的个数,$n可以获取脚本后跟随的第n个参数的值。   实例:加法计算 [root@youxi1 ~]# vim a.sh #!/bin/bash if [ $# -le 0 ] ; then echo "没有足够的参数" exit fi sum=0 while [ $# -gt 0 ] ; do sum=$[$sum+$1] shift done echo result is $sum [root@youxi1 ~]# sh a.sh 没有足够的参数 [root@youxi1 ~]# sh a.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 result is 120    来源: https://www.cnblogs.com/diantong/p/11718504.html

Linux Shell中\'$\'符号的N种用法

和自甴很熟 提交于 2019-12-01 21:48:45
在Shell中 $ 是一个特殊的字符,在不同场景中有不同的用法。 引用变量 使用 $ 直接引用变量,包括循环变量。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo $x1 双引号 " 括起来的字符串支持变量插值。 123 root@iZ2ze43t8c5urajez7ws4eZ:~# x=1root@iZ2ze43t8c5urajez7ws4eZ:~# echo "x = $x"x = 1 使用 ${} 作为单词边界。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# x=1root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "x = ${x}yz"x = 1yz 使用${#}获取变量字符串长度。 123 root@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# s=helloroot@iZ2ze43t8c5urajez7ws4eZ:/var/log/nginx# echo "s.length = ${#s}"s.length = 5 引用脚本或函数参数 基于下标的引用方式,0表示shell脚本文件名,n从1开始表示第n个参数,第1个参数是$1。

shell脚本基础小习题(二)

限于喜欢 提交于 2019-12-01 21:32:17
shell脚本基础小习题(二) 编写一个memusage.sh,根据Free命令的结果计算出内存占用率 思路: 1:在屏幕输出“free”先查看命令结果 2:根据给出的结果我们需要用到“total”和“free” total:列显示系统总的可用物理内存和交换空间大小。 free:列显示还有多少物理内存和交换空间可用使用。 这里我们只看Mem(内存的使用情况)就可以。 3:我们创建脚本但是我们在free的Mem中只需要用(“total”和“free”)该怎么编写,这里我们就要用到“grep(过滤)”,管道符号(|)和awk grep:过滤关键字相对应的行,这里我们只看“Mem” awk:以列为单位读取数据的过滤工具 awk -F其中的(-F)部分用来指定分隔符号【为指定时,就默认以空格或制表符分隔】,这里我们看到“free”中没有分隔符号 我们就直接awk后面跟空格就可以了。 awk '{prin $2}':这是固定格式 .这里$2表示free里的total所在的那列,你想用那以列就在"$"后面写数字几。但是我们这里第一列是从Mem开始算起 不要搞混淆了。 4:我们开始要想想 改用怎么样的计算方式在shell中把占用率显示出来 不可能像我们以前用手写或用计算器那样直接敲数字计算{(135276除以1867024)再乘以100 }得出结果,用shell的数值变量运算时不支持小数运算的

shell变量

梦想与她 提交于 2019-12-01 20:33:29
shell变量 shell预定义变量 #!/bin/bash echo "#当前shell脚本的文件名:$0" echo "#shell脚本的第一个位置参数:$1" echo "#shell脚本的第二个位置参数:$2" echo "#shell脚本的第三个位置参数:$3" echo "#所有传递的位置参数是:$*" echo "#所有传递的位置参数是:$@" echo "#总共传递的参数个数是:$#" echo "#当前shell运行的PID是:$$" echo "#上一个命令执行的返回结果:$?" # 结果为0,表示正常,否则异常 $* 和 $@ 的区别: [root@nginx tmp]# cat tt.sh #!/bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo "加上引号后对比" echo "------\$*------" for N in "$*" do echo $N done echo "------\$@------" for N in "$@" do echo $N done } test 11 22 33 结果输出: [root@nginx tmp]# ./tt.sh 未加引号,二者相同 11 22 33 11 22 33 加上引号后对比 ------$*------ 11 22 33 ------

## shell预定义变量 ##

烂漫一生 提交于 2019-12-01 20:33:24
#!/bin/bash echo "#当前shell脚本的文件名:$0" echo "#shell脚本的第一个位置参数:$1" echo "#shell脚本的第二个位置参数:$2" echo "#shell脚本的第三个位置参数:$3" echo "#所有传递的位置参数是:$*" echo "#所有传递的位置参数是:$@" echo "#总共传递的参数个数是:$#" echo "#当前shell运行的PID是:$$" echo "#上一个命令执行的返回结果:$?" # 结果为0,表示正常,否则异常 $* 和 $@ 的区别: [root@nginx tmp]# cat tt.sh #!/bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo "加上引号后对比" echo "------\$*------" for N in "$*" do echo $N done echo "------\$@------" for N in "$@" do echo $N done } test 11 22 33 结果输出: [root@nginx tmp]# ./tt.sh 未加引号,二者相同 11 22 33 11 22 33 加上引号后对比 ------$*------ 11 22 33 ------$@------ 11 22 33

流程控制语句if基本概述

我怕爱的太早我们不能终老 提交于 2019-12-01 20:16:53
目录 1. 流程控制语句if基本概述 2. 流程控制语句if文件比较 判断文件是否存在,返回方式 使用变量的方法进行判断 请输入你要备份的数据库名称: wordpress 请输入你要备份的数据库密码: 123.com 3. 流程控制语句if整数比较 4. 流程控制语句if字符比较 5. 流程控制语句if正则比较 6. 流程控制语句if场景示例 7. 流程控制语句case基本概述 8. 流程控制语句case场景示例 使用if判断 使用case语句 1. 流程控制语句if基本概述 01. 单分支结构 if [ 如果你有房 ];then 我就嫁给你fi #示例 [root@qiudao ~/shell]# cat if-1.sh#!/usr/bin/bashif which ls;thenecho "ok"fi #执行脚本 [root@qiudao ~/shell]# sh if-1.sh/usr/bin/lsok 02. 双分支结构 if [ 如果你有房 ];then 我就嫁给你else 再见fi #示例 [root@qiudao ~/shell]# cat if-2.sh#!/usr/bin/bashif [ $# -ne 1 ];then echo "请输入一个参数" exitfiif grep "$1" /etc/passwd;thenecho "ok!"elseecho

鸟哥linux——Shell scripts

旧巷老猫 提交于 2019-12-01 20:09:01
shell script就是shell脚本的意思。利用shell的功能所写的一个'程序',本质就是一个纯文本文件。 注意:   1.指令的执行顺序从上到下,从左到右。   2.指令,选项与参数之间的多个空白都会被忽略掉。   3.如果读到enter符号就开始执行该行指令。 执行文件: 直接执行 以bash程序来执行:bash a或者sh a 样例一:创建第一个shell脚本输出holle world #!/bin/bash echo “holle world” exit 0 第一行:#!/bin/bash 表示使用/bin/bash这个文件中的环境配置文件来执行 小练习: 样例一:键盘输入姓,名 #!/bin/bash read -p “输入你的姓:” firstname read -p “输入你的名:” lastname echo -e “\n你的全名为:${firstname}${lastname}”exit 0样例二:加法运算#!/bin/bashecho -e "请输入2个数字a, b, 然后输出结果c \n"read -p "请输入a:" aread -p "请输入b:" bc=$((${a}+${b}))echo -e "\nc=${c}\n"esit 0 脚本执行方式的区别: 1.直接执行的方式 直接执行(相对路径,绝对路径),bash(或sh)执行脚本