$1 入参,空值时默认赋值技巧

variable=${1:-"default value"} # 当未传参时,赋默认值。

echo $variable

$* 和 $@ 区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含

时,都以”$1” “$2” … “$n” 的形式输出所有参数。

但是当它们被双引号(” “)包含时,”$*” 会将所有的参数作为一个整体,

以”$1 $2 … $n”的形式输出所有参数;”

$@” 会将各个参数分开,以”$1″ “$2” … “$n” 的形式输出所有参数。

for var in "$*";do

echo "$var"

done

for var in "$@";do

echo "$var"

done

区别在于,分别输出 1 2 3 和

1

2

3

几个 Shell 里的内置变量

$# 入参个数

$$ PID

$0 文件名

$? 上个命令执行结果

Tips:

awk 教程 https://coolshell.cn/articles/9070.html

sed 教程 https://coolshell.cn/articles/9104.html

Shell script 基础问答 https://linux.cn/article-5607-1.html

Shell 四则运算方法

let C=A+B

let A++ #let 时 变量前不需要再加$

echo $(($A+$B))

echo $[$A+$B]

expr $A + $B

echo $A+$B | bc #使用 bc 可以做比较复杂的运算

函数定义与调用

# 定义

function myfun(){ #function 可省略

echo $1 echo "-----"

echo $2 echo "-----"

echo $3

}

# 调用

myfun "tom" "lucy" "jack"

条件判断

if [[ biaodashi ]]

判断文件是否存在 -f 存在真

判断目录是否存在 -d 存在真

判断字符串是否空 -z 字符串长度为 0 真

判断文件大小 -s 文件大小非 0 真

if [[ 条件 1 -a 条件 2 ]] # -a 表示与, -o 表示或

字符串与序列、随机数

name=John && echo ‘My name is $name’ 输出’My name is $name ,因为单引号里面的$只会当作字面值

字符串截取 a=123456789 ; echo ${a:0:3} 输出 123

echo 替换字符

var=tom_tom_lucy_jack_tomomttom

echo ${var/tom/mary} mary_tom_lucy_jack_tomomttom

echo ${var//tom/mary} mary_mary_lucy_jack_maryomtmary

序列

for i in {1..100} #1,2,3,4...100 这种方法好些,还可以输出间

隔系列

for i in {1..100..7} #1,8,15....99

for i in `seq 100 ` #1,2,3,4...100

for i in `seq 3 5 ` #3,4,5

随机数

echo $RANDOM

head /dev/urandom |md5sum|cksum|cut -c 1-9

使用 cksum 从管道灌进去一些随机文本可生成一些随机数字,需要使用 cut 切 割

字符串截取

a=123A123B456456C

echo ${a##*3} 从最左边找到 3 删除,贪婪 B456456C

echo ${a%%6*} 从最右边找到 6 删除,贪婪 123A123B45

echo ${a%?} 删除最右边一个字符 123A123B456456

提取最后一位

str="12345678"

i=$((${#str}-1)) #字符串长度减去 1,故 i=7

echo ${b:$i:1} #输出 8

日期

date +%F" "%R # 2018-10-14 00:09

删除空行

cat 1.txt|tr -s "n"

sed -i '/^$/d' 1.txt

grep -v "^$" 1.txt

Shell script 语法在线检查与建议:https://www.shellcheck.net

考察 if 、head 、tail、sed:https://leetcode.com/problems/tenth-line

考察 ls 按时间、体积大小排序

ls -lt 最新在前

ls -ltr 最旧在前

ls -lS 最大在前

ls -lSr 最小在前

考察 comm 的使用:http://man.linuxde.net/comm

前提是,文件要排序过。结果的第一列是仅仅在文件 1 出现的,第二列是仅仅在文件 2 出现

的,第三列是共同出现的。-1 表示不显示第一列,-2 表示不显示第二列,-3 表示不显示第三列。

考察 grep 与正则、子模式

https://leetcode.com/problems/valid-phone-numbers

https://www.interviewbit.com/problems/valid-phone-number/

答案 :

grep -P “(d{3}-|(d{3})s{1})d{3}-d{4}” input

另外, grep -c 表示匹配次数,-P 表示使用正则 -E 其实是扩展模式不是正则

考察容错处理、if、大于小于、正则、排序、去重统计、awk

https://leetcode.com/problems/word-frequency

#grep 使用 -o 输出、使用-P 表示正则、使用 awk 交换列

答案:

grep -o -P "w{1,}" words.txt |sort |uniq -c|sort -nr|awk '{print $2,$1}'

考察 awk 编程

给定一个文本文件,内有 M 行 N 列数字,求数字求和

题:给定 id 姓名 工资文本,计算工资和

1 tom 2500

2 mary 3200

3 jack 4700

4 who 6900

5 lee 2600

答案:

awk 'BEGIN{sum=0}{sum+=$3}END{print sum}' 1.txt

Ps:注意 BEGIN、END 的位置;注意 awk 里定义的变量不用$号

考察 awk 编程、单引号里如何传递变量

https://www.interviewbit.com/problems/lines-in-a-given-range/

awk 'NR>='$L' && NR<='$R' {print $0}' input

Ps:在单引号字句里,使用’$A’ 以传递变量 A

使用 awk 一行检测磁盘分区> 90%

df -Ph | awk ' NR != 1 && $5 >= 90 ' # 为什么单引号里加{}不行呢

考察 tr 替换、删除的使用、去除空格

https://www.interviewbit.com/problems/remove-punctuations/

cat input|tr -d -c "a-zA-Z0-9[:space:]" #注意 tr 里什么代表字母、什么代表数字集

检测主机是否存活的脚本(三次 ping 都失败)

Ps:有个陷阱,ubuntu 16 里使用 sh 执行时,function xxx() 会报错。因此命令行用 bash 执行脚本

#!/bin/bash

function check_ip() { # 定义ping探测函数,function 可省略

fail_count=0

ip=$1

for (( i=0;i<3;i++ ));do # 使用 (( 表达式 )) 来做 for 循环 ping 3 次

if ping -W 1 -c 1 "$ip" > /dev/null 2>&1;then # 使用-W 1 避免很久超时,单位只能整数秒有效

break # 如果ping成功了,则直接结束探测,节省时间

fi

(( fail_count=fail_count+1 )) #若ping失败,则失败数累加,这里使用(( 表达式 )) 比 let 更加高效

done

if [[ $fail_count -eq 3 ]];then

echo "$ip is failed"

else

echo "$ip is ok"

fi

}

iplist="192.168.1.100 192.168.1.101" # 给出IP列表,当然也可以自行改造成文本方案

for ip in $iplist;do

check_ip $ip

done

批量并发检测存活主机

#!/bin/bash

for ip in 119.29.192.{1..255}; #批量 IP 的技巧 ;仅仅在 bash 生效,sh 不行

do

(

ping -c3 -W1 $ip >/dev/null ;

if [ $? -eq 0 ];then

echo "$ip alive"

fi

) & #使用( )& 挂在后台 并发,更快

done

wait #等待所有子进程结束

检测站点 URL 是否存活:考察 curl 的使用、文件入参、待优化多次检测

#!/bin/bash

# this script read urls from url.txt,then check whether the site isavailable

INPUT_FILE="url.txt"

while read u;do

curl -s --connect-timeout 3 -o /dev/null $u #注意几个参数的使用 --silent 可以用-s

if [ $? -ne 0 ];then

echo "$u"" failed."

else

echo "$u"" success"

fi

done < $INPUT_FILE

让进程在后台可靠运行的方法(意思是不会随着子 shell 的退出而挂)

nohup command > /dev/null 2>&1 &

screen -S # 用快捷键 CTRL -a d 来暂时断开当前会话

command & #注意,这样标准输出可能会在屏幕里翻滚

linux运维脚本编写,Linux运维基础技能: 脚本编程与Linux命令相关推荐

  1. linux脚本编写图形,shell图形化界面脚本实现

    #!/bin/bash . /etc/rc.d/init.d/functions #此脚本用于---服务运维 #time:2018/10/29 #@一个热爱生活的好少年_lzy echo_red() ...

  2. 【socket】从计算机网络基础到socket编程——Windows Linux C语言 + Python实现(TCP+UDP)

    一.部分基础知识 1.1 计算机网络的体系结构 1.11 互联网简介 1.12 计算机网络的分类 1.13 协议与网络的分层体系结构 ▶ 协议 ▶ 网络的分层体系结构 1.14 OSI 七层模型(重要 ...

  3. 备忘录AIX主机下用SHELL脚本编写FTP传某个目录下的文件到LINUX主机

    $ more ftp_backup_to_remote.sh #!/usr/bin/ksh ftp -n<<! open 192.168.89.10 user oracle oracle ...

  4. 运维工程师需要掌握的基础技能有哪些?

    我认为运维工程师至少需要掌握以下基础技能: 精通shell/Python/Perl等1至2种编程语言 熟练掌握常用数据结构 和算法,并能灵活运用 熟悉网络基础知识 深入理解Linux操作系统 我认为运 ...

  5. shell脚本编写思路和实例讲解

    shell脚本编写思路和实例讲解 前言 常听见身边有很多学习shell脚本的朋友抱怨shell脚本不好写,好不容易写出来的脚本一直报错,符号空格又太多,错了一个就无法运行还不好排查错误. 客观讲she ...

  6. 【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )

    文章目录 一.交叉编译 Shell 脚本参考 二.NDK r16b 版本配置 三.libjpeg-turbo 交叉编译 Shell 脚本 四.执行 libjpeg-turbo 交叉编译 Shell 脚 ...

  7. 命令测试post_性能测试脚本编写之三

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 ### web_url ### ...

  8. post方法就返回了一个string字符串前台怎么接_LoadRunner脚本编写教程Getamp;Post

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 测试过程中常会遇到需要用Loa ...

  9. bash 与 shell脚本编写指南

    bash 与 shell脚本编写指南 bash 与 shell脚本编写指南 bash基本命令 man与info命令 遍历目录命令 文件与目录列表命令 处理文件相关命令 处理目录命令 查看文件内容 通过 ...

  10. Android自动化测试之MonkeyRunner MonkeyDevice MonkeyImage API使用详解 脚本编写 脚本录制回放

    MonkeyRunner 系列文章 MonkeyRunner简介 MonkeyRunner 三大模块 MonkeyRunner API MonkeyDevice API MonkeyImage API ...

最新文章

  1. 淘宝、美团、滴滴分别如何搭建大数据平台?
  2. 如何使用vue.js 实现前台html页面和后台的数据绑定
  3. 【译】Spring 官方教程:使用 Restdocs 创建 API 文档
  4. linux怎么监控守护进程,linux shell脚本守护进程监控svn服务
  5. 关于mysql的一些问题_关于mysql的一些细节问题
  6. leetcode剑指 Offer 20. 表示数值的字符串
  7. linux java 输出_Java远程连接linux的方法,执行命令并输出结果
  8. navicat导入CSV/Excel文件
  9. yuv420和yuv420p的区别
  10. Kafka 入门教程之一: 安装
  11. [读书笔记] 计算机组成原理 唐朔飞 (一)基本概念
  12. 【漏扫工具】awvs、appscan、xray下载、安装、使用方法(附带网盘链接)
  13. 中国百家姓氏图腾大全
  14. python写接口调用模型_基于Python开发的SWMM模型调用接口
  15. SI24R1兼容NRF24L01P DEMO板使用说明书
  16. 微信公众号网页分享设置及问题
  17. 虚拟服务器怎么选操作系统,虚拟主机怎样选择合适的操作系统
  18. 理解与应用css中的display属性
  19. 公众号开发(三)----接收事件推送之关注/取消关注事件
  20. 走近“领域特定语言”

热门文章

  1. 60. MySQLi 扩展拾遗
  2. 5. Javascript 错误和异常
  3. 20. Feature分支
  4. 《数学之美》—自然语言处理
  5. Java中的HashCode 1 之hash算法基本原理
  6. 应用安全 - Web安全 - 文件包含攻防
  7. 记一次oracle安装错误:INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'...
  8. 2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用
  9. 一道综合练习题实践list及dictionary集合类
  10. HTML5 Web Storage