Shell编程基础进阶(3)

cat dis-sshkey.sh

#!/bin/sh . /etc/init.d/functions [ ! -f iplist ] && echo "hostlists.txt is not exist." && exit 1 for host in `cat /home/oldgirl/iplist` do expect expect-copy-sshkey.exp $host &>/dev/null if [ $? -eq 0 ];then action "$host dis data" /bin/true else action "$host dis data" /bin/false fi done mkpasswd openssl mkpasswd -l 10 -c 3 -C 3 -d 3 openssl rand -base64 80 basename dirname basename /etc/init.d/network network dirname /etc/init.d/network

/etc/init.d

 shell脚本 脚本第一行

指定脚本解释器

#!/bin/sh #!/bin/bash #! /usr/bin/awk #! /bin/sed #! /usr/bin/tclsh #! /usr/bin/expect #! /usr/bin/perl #! /usr/bin/env Python 脚本注释

单行注释 #
多行注释

<<'EOF' 语句1 语句2 ... 语句n EOF 脚本构成

主脚本
模块(子脚本)

主脚本 调用模块

模块中 有 函数

先调用模块,再调用函数

脚本执行参数

-x 将执行的脚本内容及输出显示到屏幕上

-n 不会执行该脚本,仅查询脚本语法是否有问题,并给出错误提示。

-v 在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也会给出错误提示

 变量 变量类型 自定义变量

1.定义变量变量名=变量值 ,不允许数字命名, 不能使用横岗命名
2.引用变量$变量名 或 ${变量名}
3.查看变量echo $变量名 set显示所有变量,包括自定义变量和环境变量

4.取消变量unset 变量名 作用范围:仅在当前 shell 中有效

系统环境变量
1.定义环境变量 export export 变量 ,将自定义变量转换成环境变量
2.引用环境变量 $变量名 或 ${变量名}
3.查看环境变量 echo $变量名 env |grep Name
4.取消环境变量 unset 变量名
5.作用范围在当前shell和子shell有效

位置参数变量

$1
$2
$3

${10}

预先定义变量
$0 脚本文件名
$* 所有的参数
$@ 所有的参数

set "I am" handsome zeq for i in "$*" ; do echo $i; done for i in "$@" ; do echo $i; done

$# 参数的个数
$$ 当前进程的 PID
$! 上一个后台进程的 PID
$? 上一个命令的返回值 0 表示成功

$_ 在此之前执行的命令或脚本的最后一个参数

变量赋值方式

1.显式赋值(变量名=变量值) 2.read从键盘读入变量值 read -p "请输入数字:" echo $REPLY 3.定义或引用变量时注意事项: " "弱引用 ' '强引用 4.``命令替换等价于$()反引号中的shell命令会被先执行 变量子串

变量长度

${#string}

从前往后删除变量内容

${string#substring} 从变量$string开头开始删除最短匹配$substring子串 ${string##substring} 从变量$string开头开始删除最长匹配$substring子串

从后往前删除变量内容

${string%substring} 从变量$string结尾开始删除最短匹配$substring子串 ${string%%substring} 从变量$string结尾开始删除最长匹配$substring子串

索引及切片

${string:position} 在$string中,从$position个开始提取子串(从0开始计数) ${string:position:length} 在$string中,从位置$position之后开始提取长度为$length的子串

变量内容替换

${parameter/pattern/string} 使用string代替第一个匹配的pattern ${parameter//pattern/string} 使用string代替所有的pattern ${parameter/#pattern/string} 从开头匹配string变量中的pattern, 用string替换匹配的pattern ${parameter/%pattern/string} 从结尾匹配string变量中的pattern, 用string替换匹配的pattern

变量替代

${value:-word} 如果变量名存在且非null,则返回变量的值。否则,返回word字符串 用途:如果变量未定义,则返回备用的值 ${value:=word} 如果变量名存在且非null,则返回变量值。否则,设置这个变量值为word 并返回其值 用途:如果变量未定义,则设置变量为默认值,并返回默认值 ${value:?"not defined"} 如果变量名存在且非null,则返回变量的值。否则显示变量名:message, 并退出当前的命令或者脚本 用途:用于捕捉由于变量未定义而导致的错误,并退出程序 ${value:+word} 如果变量名存在且非null,则返回word。 否则返回null 用途:测试变量是否存在 变量作用域 环境变量

使用 export 定义,在当前shell及其子shell中生效

本地变量

仅在当前shell中生效

局部变量

使用 local 定义 ,仅在函数中生效

 表达式 运算符

++ -- 自增 自减

! ~ 正号 负号 逻辑取反 按位取反
/ % 乘 除 取余

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/189721ecd4cb9ca7dabc34afde2ff454.html