下面表格中是返回值对应着退出状态的解释: $?特殊变量 shell中的变量名$?是一个特殊的内置变量,可以获取最后一次执行命令的退出状态。 在执行shell函数后,$?返回函数中最后一次执行命令的退出状态。 在执行shell脚本后,$?返回脚本中最后一次执行命令的退出状态。 包含退出状态的脚本实例 以下exit_status.sh脚本显示了几种退出状态: [root@localhost scripts]# vim exit_st...
示例1:使用 $*和$@ 来扩展位置参数 本实例脚本中使用$*和$@参数: [root@localhost scripts]# vim expan.sh #!/bin/bash export IFS='-' cnt=1 # Printing the data available in $* echo "Values of "$*":" for arg in "$*" do echo "Arg #$cnt= $arg" let "cnt+=1" done cnt=1 # Printing the data available in $@ echo "Values of "$@":" for arg ...
环境 Centos8 安装shc [root@localhost ~]# yum -y install shc 创建一个shell脚本 下面创建一个脚本文件: [root@localhost ~]# vim welcome.sh #!/bin/sh echo "Welcome to linux world" 使用shc加密该脚本文件 如下所示,使用shc加密welcome.sh脚本。 [root@localhost scripts]# shc -v -f welcome.sh shc shll=sh shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l...
终止所有用户会话 下面的shell脚本将通过获取用户会话的tty值来终止所有用户的活动会话,并使用pkill命令将其终止: [root@localhost ~]# vim kill-user-sessions.sh #!/bin/bash usession=$(w | awk '{if (NR!=1) {print $2 }}' | tail -n +2) for i in $usession do pkill -9 -t $i done 给脚本加上可执行权限: [root@localhost ~]# chmod +x kill-user-sessions...
Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试: 算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。 文件属性测试,比如一个文件是否存在,[ -e $var ], 是否是目录,[ -d $var ]。 字符串比较, 比如两个字符串是否相同, [[ $var1 = $var2 ]]。 [] 常常可以使用 test 命令来代替,后面有介绍。 算术比较 对变量或值进行算术条件判断: [ $var -eq 0 ] # 当 $v...
1、查看有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l 2、查看某一个页面被访问的次数: grep "/index.php" log_file | wc -l 3、查看每一个IP访问了多少个页面: awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txt sort -n -t ‘ ‘ -k 2 log.txt 配合sort进一步排序 4、将每个IP访问的页面数进行从小到大排序: awk '{++S[$1]} END...
1.声明一个数组并赋值 在bash中,使用以下格式的变量时会自动创建数组: name[index]=value name 是数组的名字。 index 可以是任何数字或表达式,值必须等于或大于零。 要访问数组元素,请使用大括号,例如${name[index]}。下面是访问Unix数组中的第二个元素,以为数组索引从0开始,所以Unix[1]就是第二个元素了。 [root@localhost ~]# cat arraymanip.sh #! /bin/bash Unix[...
系统环境 Centos7 1)检查可用的网络接口 使用ip和awk命令,过滤出状态为UP的网络接口。 [root@localhost ~]# ip ad|awk '/state UP/ {print $2}' ens33: ens38: 2)查看网络接口的IP地址 使用下面命令过滤出每个接口的ip地址: [root@localhost ~]# ip -o addr |awk '/inet/{print $2,$4}' lo 127.0.0.1/8 lo ::1/128 ens33 192.168.43.138/24 ens33 fe80::214e:53b4:43...
方法一、使用输入重定向 逐行读取文件的最简单方法是在while循环中使用输入重定向。 为了演示,在此创建一个名为“ mycontent.txt”的文本文件,文件内容在下面: [root@localhost ~]# cat mycontent.txt This is a sample file We are going through contents line by line to understand 创建一个名为“ example1.sh”的脚本,该脚本使用输入重定向和循环: [root@localhost...
一、小括号,圆括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 ②命令替换。等同于cmd,shell扫描一遍命令行,发现了结构,便将(cmd)结构,便将(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些s...
/dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同样,/dev/null 在命令行和脚本中都非常有用 用途 /dev/null 通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成,任何你想丢弃的数据都可以写入其中 丢弃标准输出 在写shell...
inotify 是linux内核的一个特性,在内核 2.6.13 以上都可以使用。 如果在shell环境下,可以安装 yum install inotify-tools,安装以后有两个命令可以用inotifywait 和 inotifywatch,inotifywait 是需要使用的命令。 监听/usr/local/src 目录: /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib /usr/local/s...
1、代码 #!/usr/bin/env bash # 本命令用于显示指定路径或者当前路径的文件结构,支持搜索 # tf 显示当前目录的文件结构 # tf 接关键词 搜索当前目录 # tf 目录 关键词 搜索指定目录 # 本命令依赖于 tree 命令 DIR= KEYWORD= # 不传路径 默认为搜索 if [ # -eq 1 ]; then KEYWORD=1 fi # 指定路径搜索 if [ # -eq 2 ]; then DIR=1 KEYWORD=2 f...
在Linux开发中,经常会编写shell脚本来执行一些任务,通常是一个脚本只做一件事,随着任务的增加,脚本会越来越多,可复用的地方也会逐渐增加,这时就需要提取出脚本中的公共的功能放到一个通用的脚本中,其他脚本都能复用它 本篇文章介绍shell脚本中如何执行外部脚本,如何调用外部脚本中的函数,以及脚本复用相关的方法 执行外部脚本的方式 假如在当前目录有 a.sh 脚本,内容如下 ...
字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bash username="mayuan" str_1="hello ${username}" str_2='hello ${username}' echo $str_1 # hello mayuan echo $str_2 # hello ${username} 获取字符串的长度 #! /bin/bash username="mayuan" echo ${#username} # 6 截取字符串 #! /bin/bash username="mayuan" echo ${username:1:...
1.Shell函数的定义格式 可以带function关键字使用function fun_name()来定义,也可以直接给出函数名fun_name()定义。不能带任何参数,函数名必须唯一,使时可以传递参数,使用$1,$2,…,$* ,$@来获取参数。建议使用function关键字来定义函数,便于代码阅读。定义格式如下: function_name() { list of commands [ return value ] } #或 function function_name() { l...
传参用法 Linux Shell 如何获取参数的方法 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前进程ID号 $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误 举...
自己写的东西,要同时推送多个git地址,解决办法如下 初始化 git初始化 1.先要初始化你的git,进入自己的项目目录,然后执行 git init cd /app/code/go-study git init 创建执行脚本 2.执行以下脚本 #!/bin/bash #author Oliver #since 2020-09-03 15:24:31 git remote rm origin #replace your git location git remote add origin 'https://github.com/**********' git pul...
创建脚本文件 第一步是使用以下命令创建一个扩展名为.sh的新文件: [root@localhost ~]# touch hello_script.sh 写一个简单的脚本 使用vim编辑器打开新创建的文件,将以下bash脚本添加到文件中: [root@localhost ~]# vim hello_script.sh 下面是添加到文件中的脚本内容: #!/bin/bash echo "Hello World" 编辑完,保存并退出。 执行Bash脚本 有两种方法可以运行bash文...
一、安装Linux下面的一个邮件客户端Msmtp软件(类似于一个Foxmail的工具) 1、下载安装:http://downloads.sourceforge.net … 206451&big_mirror=0 # tar jxvf msmtp-1.4.16.tar.bz2 # cd msmtp-1.4.16 # ./configure --prefix=/usr/local/msmtp # make # make install 2、创建msmtp配置文件和日志文件(host为邮件域名,邮件用户名test,密码123456) # vim ~/.msmtprc ...