linux中shell 循环处理每天数据linux操作系统
“苦行僧”通过精心收集,向本站投稿了10篇linux中shell 循环处理每天数据linux操作系统,下面小编给大家整理后的linux中shell 循环处理每天数据linux操作系统,希望大家喜欢!
篇1:linux中shell 循环处理每天数据linux操作系统
本文章来给大介绍一个linux中shell 循环处理每天数据实例,各位朋友可参考,这里根据目录日期来操作,但不适用于跨月操作,
日期循环,在处理某些按日期存放的数据中很有用。尤其是测试和补录,删除,重新处理数据。但是如果遇到跨月等情况,单纯用数值循环是不行的。
本shell即可用于处理多日数据情况。
代码如下复制代码#!/usr/bin/env bash
#author: Andy Zhou
#Date:.8.6
source dateutil.sh
begin=20130701
end=20130904
for (( d=$begin; d<=$end; d=`getnextday $d `)); do
echo “date:”$d
#. myshell.sh $d
日期工具 dateutil.sh:
代码如下复制代码#/usr/bin/env bash
#author:Andy Zhou
#date:2013.8.2
getnextday
{
#date -d “2013-09-10 +1 day ” +%Y-%m-%d
date -d “$1 +1 day ” +%Y%m%d
}
getyearmonth()
{
date +%Y%m --date=$1 #shortdate
}
getday()
{
date +%d --date=$1 #shortdate
}
long_date()
{
date +%Y-%m-%d --date=$1 #shortdate
}
short_date()
{
date +%Y%m%d --date=$1 #longdate
}
long_yesterday()
{
date --date='1 day ago' +%Y-%m-%d
}
yesterday()
{
date --date='1 day ago' +%Y%m%d
}
long_today()
{
date +%Y-%m-%d
}
today()
{
date +%Y%m%d
}
now()
{
date '+%Y-%m-%d %H:%M:%S'
}
last_month()
{
date --date='1 month ago' '+%Y%m'
}
year()
{
date +%Y
}
month()
{
date +%m
}
sec2date()
{
date -d “1970-01-01 UTC $1 seconds” “+%Y%m%d”
}
sec2datetime()
{
date -d “1970-01-01 UTC $1 seconds” “+%Y%m%d %H:%M:%S”
}
篇2:linux中常用 shell 命令组合 linux操作系统
下面我们一起来看看关于linux中常用 shell 命令组合 整理文章,希望此文章对各位同学会带来帮助哦,
//把0321_files.txt文件中每行路径中文件的内容 action 改为 action_begin,
sed -i “s/action/action_begin/g” `cat 20140321_files.txt`
//把 20140321_files.txt 中的文件内容 tags 替换为 tags.php
sed -i “s/tags/tags.php/g” `ls 20140321_files.txt`
//遍历循环20140321_files.txt中的每行路径 将 /root/20140321/tags.php 复制过去
for F in `cat 20140321_files.txt` ;do cp /root/20140321/tags.php $F;done
// 查找 home 目录下的所有 tags.php 根据路径 取出 所属的用户 ,更新该文件所属的用户权限
1 #!/bin/bash
2 for F in `find /home -name “tags.php”`;
3 do
4 user=“`echo $F | awk -F '/' '{print $3}'`”;
5 chown $user:$user $F
6 done
// 查找 /home/ 下的 所有 tags.php 文件 中内容包含 action_begin 的 、并且该文件位于 ThinkPHP 目录
find /home/ -name “tags.php” | xargs grep “action_begin” | grep “ThinkPHP”
篇3:linux中shell脚本迁移压缩包linux操作系统
最近要把公司的几个备份包分别拷贝到其他文件夹去,因为另外一个脚本是要把最新的备份包给筛选出来,然后我要用下面这个脚本把最新的备份包给拷贝到其他文件夹去,但在使用过程不知道为什么会把sql文件夹给一起拷贝走,问了几个朋友,才把问题给解决了.
原来的脚本:
代码如下复制代码#!/bin/bashfile=“/root/newfile/”
list=“/root/sqlbak”
ls -l $list/ |awk '{print $9}'|while read line
do
cp -r $list/$line $file
done
修改后的脚本:
代码如下复制代码#!/bin/bashfile=“/root/newfile/”
list=“/root/sqlbak”
ls -l $list/ |grep -v total|awk '{print $9}'|while read line
do
cp -r $list/$line $file
done
当然也有另外一个朋友给了另外一种办法:
代码如下复制代码#!/bin/bashfile=“/root/newfile/”
list=“/root/sqlbak”
for i in $list/*;do cp -r $i $newfile/;done
这样让脚本执行起来更有效率.
原文来自:夜空博客 blog.slogra.com/post-519.html
篇4:linux中shell中的变量使用说明linux操作系统
shell变量包括有很多种,如有:变量定义,数组变量,只读变量,局部变量,环境变量及Shell变量等等这些一点都不比我们php变量少呀,
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如“$*”用「“」括起来的情况、以”$1 $2 … $n“的形式输出所有参数。
$@
所有参数列表。如”$@“用「”」括起来的情况、以“$1” “$2” … “$n” 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
下面我们来写一个简单的脚本,执行过后再解释各个变量的意思
# touch variable
# vi variable
1
2 # touch variable# vi variable
脚本内容如下:
Shell
#!/bin/sh
echo “number:$#”
echo “scname:$0”
echo “first :$1”
echo “second:$2”
echo “argume:$@”
#!/bin/shecho “number:$#”echo “scname:$0”echo “first :$1”echo “second:$2”echo “argume:$@”
保存退出
赋予脚本执行权限
# chmod +x variable
1 # chmod +x variable
执行脚本:
# ./variable aa bb
1 # ./variable aa bb
结果:
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
补充一下关于shell变量
name是变量名,value是变量的值,比如name=zdd,注意,Shell定义变量的时候不需要加$,而使用变量的时候则需要加$,这点和perl是有区别的,perl定义变量的时候也需要$符号,
定义变量的时候要注意以下几点。
•Shell中的变量只能由字母,数字和下划线组成,且不能以数字开头。
•如果变量值中含有空格,应该用引号(单引号双引号均可)括起,比如 “Hello world”或'Hello world'。
•等号左右都没有空格。
使用变量
访问一个变量的时候只要在其前面加一个$即可,比如echo $name,如果不加$,则显示变量的名字,也就是echo name将显示name。
数组变量
Bourne Shell(sh)只支持标量,Korn Shell(ksh)和第二版及更高版本的Bourne Again Shell(bash)都支持数组变量。
定义数组
为单个元素赋值
name[index]=value
为整个数组赋值
bash
name=(value1 value2... valuen) 各个元素以空格分离。
也可以只为某些元素赋值
name=([0]=value0 [3]=value3 [5]=value5)
ksh
set -A name value1 value2 ... valuen, name是数组名。
使用数组
访问单个值
${name[index]}
访问整个数组
${name[*]}
${name[@]} 可以处理包含空格的数组元素,推荐使用。
只读变量
定义方法
name=value
readonly name
只读变量一旦定义就不可更改其值,也不能用unset删除。
变量类型
局部变量
在Shell脚本中由用户自定义的变量。
环境变量
使用export命令可以查看当前系统的环境变量。
Shell变量
常用的Shell变量有如下这些。
PWD
UID
SHLVL
REPLY
RANDOM
SECONDS
IFS
PATH
HOME
删除变量
unset name
如何删除数组变量?
篇5:linux中shell 一个字符拆分linux操作系统
查了好就的字符拆分,都不会,只能怪自己才艺不精,废话不多说,整理别人的,(作为自己笔记)希望本文章对各位同学会有所帮助。
字符:12345abcde
拆分成:
1
2
3
4
5
a
b
c
d
e
方法
echo 12345abcde | awk -F ” ‘{for(i=1;i<=NF;i++)print $i}’
echo 12345abcde | sed ‘s/./&n/g’
echo 12345abcde | grep -Po ‘.’
echo “12345abcde” | fold -w1
然后
求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×…×999×1000
[root@node4 ~]# cat t.sh
#!/bin/bash
export a=1
for i in `seq 1 1000`
do
a=`expr $a * $i`
done
echo $a
[root@node4 ~]# sh t.sh | awk -F ” ‘{for(i=1;i<=NF;i++) ++S[$i] } END{for (i in S) if( i == 0 ) print i ” “S[i]}’
0 472
那0到9呢
[root@node4 ~]# sh t.sh | awk -F ” ‘{for(i=1;i<=NF;i++) ++S[$i] } END{for (i in S) print i ” “S[i]}’
4 229
5 213
6 231
7 217
8 257
9 246
0 472
1 239
2 248
3 216
查询一个字符串中字符 B 所在位子
[root@node4 ~]# cat aa
dfgsBfrgB
frgfvregB
B
grg
fsdvgbBef
Bfrg
[root@node4 ~]# awk -F ” ‘{for(i=1;i<=NF;i++)S[i]=$i ;for (i in S) if(S[i] == “B”)print i” ” S[i] ” row ” NR;delete S}’ aa
5 B row 1
9 B row 1
10 B row 2
1 B row 3
7 B row 5
1 B row 6
篇6:linux中Bash shell学习笔记linux操作系统
今天看到一站长写得非常不错的一篇关于Bash shell速成的学习笔记,下面我把文章并整理了一些其它相关的内容,希望给大家带来帮助,
BASH 的基本语法
•最简单的例子 —— Hello World www.111cn.net !
•关于输入、输出和错误输出
•BASH 中对变量的规定(与 C 语言的异同)
•BASH 中的基本流程控制语法
•函数的使用
2.1 最简单的例子 —— Hello World!
几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。
用 vi 编辑器编辑一个 hello 文件如下:
#!/bin/bash
# This is a very simple example
echo Hello World
这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下:
一,第一行的 #! 是什么意思
二,第一行的 /bin/bash 又是什么意思
三,第二行是注释吗
四,echo 语句
五,如何执行该程序
#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 “man magic”命令 及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中 第一行的 “#!” 及后面的 “/bin/bash” 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 “locate bash” “find / -name bash 2>/dev/null” 或 “whereis bash” 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。
第二行的 www.111cn.net “# This is a ...” 就是 BASH 程序的注释,在 BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。的三行的 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去。由于 echo 后跟的是 “Hello World” 这个字符串,因此 “Hello World”这个字串就被显示在控制台终端的屏幕上了。需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。
如何执行该程序呢?有两种方法:一种是显式制定 BASH 去执行:
$ bash hello 或
$ sh hello (这里 sh 是指向 bash 的一个链接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh ->bash”)
或者可以先将 hello 文件改为可以执行的文件,然后直接运行它,此时由于 hello 文件第一行的 “#! /bin/bash” 的作用,系统会自动用/bin/bash 程序去解释执行 hello 文件的:
$ chmod u+x hello
$ ./hello
此处没有直接 “$ hello”是因为当前目录不是当前用户可执行文件的默认目录,而将当前目录“.”设为默认目录是一个不安全的设置。
需要注意的是,BASH 程序被执行后,实际上 Linux 系统是另外开设了一个进程来运行的。
2.2 关于输入、输出和错误输出
在字符终端环境中,标准输入/标准输出的概念很好理解。输入即指对一个应用程序 或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息;与 Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出于标准输出分开可以让一些高级的错误信息不干扰正常的输出 信息,从而方便一般用户的使用。
在 Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示 standard)。在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。
输入、输出及标准错误输出主要用于 I/O 的重定向,就是说需要改变他们的默认设置。先看这个例子:
$ ls >ls_result
$ ls -l >>ls_result
上面这两个命令分别将 ls 命令的结果输出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是输出到屏幕上,
“>”就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个 “>” 符号,即 “>>” 则表示不清除原来的而追加输出。下面再来看一个稍微复杂的例子:
$ find /home -name lost* 2>err_result
这个命令在 “>” 符号之前多了一个 “2”,“2>” 表示将标准错误输出重定向。由于 /home 目录下有些目录由于权限限制不能访问,因此会产生一些标准错误输出被存放在 err_result 文件中。大家可以设想一下 find /home -name lost* 2>>err_result 命令会产生什么结果?
如果直接执行 find /home -name lost* >all_result ,其结果是只有标准输出被存入 all_result 文件中,要想让标准错误输出和标准输入一样都被存入到文件中,那该怎么办呢?看下面这个例子:
$ find /home -name lost* >all_result 2>& 1
上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 all_result 这个文件中。这样我们就可以将所有的输出都存储到文件中了。为实现上述功能,还有一种简便的写法如下:
$ find /home -name lost* >& all_result
如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:
$ find /home -name lost* 2>/dev/null
同学们回去后还可以再试验一下如下几种重定向方式,看看会出什么结果,为什么?
$ find /home -name lost* >all_result 1>& 2
$ find /home -name lost* 2>all_result 1>& 2
$ find /home -name lost* 2>& 1 >all_result
另外一个非常有用的重定向操作符是 “-”,请看下面这个例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
条件语句(注意:条件里两边的空格,引号,等号)
if [ “$var” = “abc” ]; then
…
elif [ “$var” = “ac” ]; then
…
else
…
fi
for循环
for var in $(ls *.sh); do
echo $var
done
while循环
var=1
while [ “$var” -le 20 ] ; do
var=$(($var+1))
done
until循环(跟while循环相反的)
until condition
do
…
done
case条件(可用正则,;;相当于break)
case “$var” in
yes | YES | y )
echo “YES”
echo “haha”
;;
[Nn]* ) echo “NO”;;
* ) echo “OTHER”;;
esac
定义/赋值变量
var=xxx (等号两边不能有空格)
变量读取
echo $var
读取用户输入
read var
不输出换行
echo -n
执行命令并捕获返回值
$(command)
其它
shell里默认类型是字符串型
发布在编程算法 已有标签 bash, shell. 将该链接存入书签。 Trackbacks are closed, but you can post a comment.
篇7:Linux中shell命令的用法和技巧linux操作系统
shell命令在linux中是非常重要的一个命令了,本文章给大家介绍Linux中shell命令的用法和技巧,如果你正在学习linux不防进入参考,
使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧。当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务。于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件。这个文件我会不断的更新。需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件。
UPDATE: November 25,
检查远程端口是否对bash开放:
echo >/dev/tcp/8.8.8.8/53 && echo “open”
让进程转入后台:
Ctrl + z
将进程转到前台:
fg
产生随机的十六进制数,其中n是字符数:
openssl rand -hex n
在当前shell里执行一个文件里的命令:
source /home/user/file.name
截取前5个字符:
${variable:0:5}
SSH debug 模式:
ssh -vvv user@ip_address
SSH with pem key:
ssh user@ip_address -i key.pem
用wget抓取完整的网站目录结构,存放到本地目录中:
wget -r --no-parent --reject “index.html*” hostname/ -P /home/user/dirs
一次创建多个目录:
mkdir -p /home/user/{test,test1,test2}
列出包括子进程的进程树:
ps axwef
创建 war 文件:
jar -cvf name.war file
测试硬盘写入速度:
dd if=/dev/zero f=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img
测试硬盘读取速度:
hdparm -Tt /dev/sda
获取文本的md5 hash:
echo -n “text” | md5sum
检查xml格式:
xmllint --noout file.xml
将tar.gz提取到新目录里:
tar zxvf package.tar.gz -C new_dir
使用curl获取HTTP头信息:
curl -I www.111cn.net
修改文件或目录的时间戳(YYMMDDhhmm):
touch -t 0712250000 file
用wget命令执行ftp下载:
wget -m ftp://username:password@hostname
生成随机密码(例子里是16个字符长):
LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;
快速备份一个文件:
cp some_file_name{,.bkp}
访问Windows共享目录:
smbclient -U “DOMAINuser” //dc.domain.com/share/test/dir
执行历史记录里的命令(这里是第100行):
!100
解压:
unzip package_name.zip -d dir_name
输入多行文字(CTRL + d 退出):
cat >test.txt
创建空文件或清空一个现有文件:
>test.txt
与Ubuntu NTP server同步时间:
ntpdate ntp.ubuntu.com
用netstat显示所有tcp4监听端口:
netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'
qcow2镜像文件转换:
qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img
precise-server-cloudimg-amd64-disk1.raw
重复运行文件,显示其输出(缺省是2秒一次):
watch ps -ef
所有用户列表:
getent passwd
Mount root in read/write mode:
mount -o remount,rw /
挂载一个目录(这是不能使用链接的情况):
mount --bind /source /destination
动态更新DNS server:
nsupdate <
update add $HOST 86400 A $IP
send
EOF
递归grep所有目录:
grep -r “some_text” /path/to/dir
列出前10个最大的文件:
lsof / | awk '{ if($7 >1048576) print $7/1048576 “MB ”$9 }' | sort -n -u | tail
显示剩余内存(MB):
free -m | grep cache | awk '/[0-9]/{ print $4“ MB” }'
打开Vim并跳到文件末:
vim + some_file_name
Git 克隆指定分支(master):
git clone git@github.com:name/app.git -b master
Git 切换到其它分支(develop):
git checkout develop
Git 删除分支(myfeature):
git branch -d myfeature
Git 删除远程分支
git push origin :branchName
Git 将新分支推送到远程服务器:
git push -u origin mynewfeature
打印历史记录中最后一次cat命令:
!cat:p
运行历史记录里最后一次cat命令:
!cat
找出/home/user下所有空子目录:
find /home/user -maxdepth 1 -type d -empty
获取test.txt文件中第50-60行内容:
< test.txt sed -n '50,60p'
运行最后一个命令(如果最后一个命令是mkdir /root/test, 下面将会运行: sudo mkdir /root/test):
sudo !!
创建临时RAM文件系统 – ramdisk (先创建/tmpram目录):
mount -t tmpfs tmpfs /tmpram -o size=512m
Grep whole words:
grep -w “name” test.txt
在需要提升权限的情况下往一个文件里追加文本:
echo “some text” | sudo tee -a /path/file
列出所有kill signal参数:
kill -l
在bash历史记录里禁止记录最后一次会话:
kill -9 $$
扫描网络寻找开放的端口:
nmap -p 8081 172.20.0.0/16
设置git email:
git config --global user.email “me@111cn.net”
To sync with master if you have unpublished commits:
git pull --rebase origin master
将所有文件名中含有”txt”的文件移入/home/user目录:
find -iname “*txt*” -exec mv -v {} /home/user ;
将文件按行并列显示:
paste test.txt test1.txt
shell里的进度条:
pv data.log
使用netcat将数据发送到Graphite server:
echo “hosts.sampleHost 10 `date +%s`” | nc 192.168.200.2 3000
将tabs转换成空格:
expand test.txt >test1.txt
Skip bash history:
< space >cmd
去之前的工作目录:
cd -
拆分大体积的tar.gz文件(每个100MB),然后合并回去:
split –b 100m /path/to/large/archive /path/to/output/files
cat files* >archive
使用curl获取HTTP status code:
curl -sL -w “%{http_code}\n” www.111cn.net -o /dev/null
设置root密码,强化MySQL安全安装:
/usr/bin/mysql_secure_installation
当Ctrl + c不好使时:
Ctrl +
获取文件owner:
stat -c %U file.txt
block设备列表:
lsblk -f
找出文件名结尾有空格的文件:
find . -type f -exec egrep -l “ +$” {} ;
找出文件名有tab缩进符的文件
find . -type f -exec egrep -l $'t' {} ;
用”=”打印出横线:
printf '%100sn' | tr ' ' =
篇8:linux中shell截取字符串方法总结linux操作系统
shell中截取字符串的方法有很多中,可以分为两大类,第一种获取特定的字符或字符串的左边或者右边的字字符串,java中实现需要先用indexOf来确定特定字符串的位置,然后再用substring来获取结果;第二种类似java中的substring
shell中截取字符串的方法有很多中,
${expression}一共有9种使用方法。
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
上面4种可以用来进行缺省值的替换。
${#parameter}
上面这种可以获得字符串的长度。
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word
${parameter##word} 最大限度从前面截取word
上面4个就是用来截取字符串的方法了。
有了着四种用法就不必使用cut命令来截取字符串了
第一种又可以分为四种情况,下面一一介绍。
1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#*substr,例如:
str='www.你的域名.com/cut-string.html'
echo ${str#*//}
得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个“//”及其左边所有字符2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。用法为##*substr,例如:
str='www.你的域名.com/cut-string.html'
echo ${str##*/}
得到的结果为cut-string.html,即删除最后出现的“/”及其左边所有字符3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr*,例如:
str='www.你的域名.com/cut-string.html'
echo ${str%/*}
得到的结果为www.你的域名.com,即删除从右边开始到第一个“/”及其右边所有字符4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr*,例如:
str='www.你的域名.com/cut-string.html'
echo ${str%%/*}
得到的结果为www.你的域名.com,即删除从右边开始到最后一个“/”及其右边所有字符第二种也分为四种,分别介绍如下:
1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如:
str='www.你的域名.com/cut-string.html'
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:2、从左边第几个字符开始一直到结束,用法为:start,例如:
str='www.你的域名.com/cut-string.html'
echo ${var:7}
其中的 7 表示左边第8个字符开始
结果是:www.你的域名.com/cut-string.html3、从右边第几个字符开始以及字符的个数,用法:0-start:len,例如:
str='www.你的域名.com/cut-string.html'
echo ${str:0-15:10}
其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数,
结果是:cut-string3、从右边第几个字符开始一直到结束,用法:0-start,例如:
str='www.你的域名.com/cut-string.html'
echo ${str:0-4}
其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
结果是:html注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
网上其它参考内容
一、Linux shell 截取字符变量的前8位,有方法如下:
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr(,1,8)}’
3.echo $a|cut -c1-8
4.echo $
5.expr $a : ‘(.\).*’
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
1、第一种方法:
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
例子:
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg
2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
三、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
篇9:linux中利用shell监控网站状态linux操作系统
我们现在网站都会使用一些工具监控网站服务器是否可以访问,但不能监控网站的状态,下面我来给大家推荐一个linux中利用shell监控网站状态脚本,
今天给自己的网站写了shell监控,避免网站挂了我都不知道,这个脚本是分别检查网页状态和网页连接时间,还可以根据自己的需要进行扩展,很强大.
脚本内容:
vi check-web.sh
代码如下复制代码#!/bin/shweblist=/root/weblist.txt
for list in `cat $weblist|grep -E -v “#|^$”`
do
httpcode=`curl -o /dev/null -s -w %{http_code} “$list”`
httptime=`curl -o /dev/null -s -w “time_connect: %{time_connect}ntime_starttransfer:%{time_starttransfer}ntime_total: %{time_total}n” “$list”|grep time_total|awk -F “:” '{print $2*1000}'`
#if [ $httpcode = 200 ]||[ $httpcode = 301 ]||[ $httpcode = 302 ]||[ $httpcode = 403 ]||[ $httpcode = 401 ]
if [ $httpcode = 200 ]||[ $httpcode = 301 ]||[ $httpcode = 302 ]
then
echo “$list is checked ok!”
else
echo “$list is down!” | mutt -s “web is down” rocdk@163.com
fi
if [ $httptime -ge 10000 ]
then
echo “$list is timeout!” | mutt -s “web is timeout” rocdk@163.com
else
echo “$list is connect ok!”
fi
done
然后创建要检查网站的列表,格式为xxx.xxx.xxx
代码如下复制代码touch /root/weblist.txtblog.slogra.com
chmod +x /root/soft_shell/check-web.sh
crontab -e
*/3 * * * * /bin/sh /root/soft_shell/check-web.sh
手动运行后的图如下
好了,这下可以放心了.
篇10:linux中shell获取ssh端口号方法linux操作系统
利用shell获取ssh端口我还是第一次听说过了,不过有一个牛B的站长就是做到了,下面我把他写的shell获取ssh端口号方法给大家分享一下吧,希望文章对各位会带来帮助.
格,如下:
代码如下复制代码[root@MyVPS1697 201407]# netstat -ntpl|grep sshd|grep -v grep |awk -F : '{print $4}'
为了解决空格问题,把我所在的3个运维群都问了一个遍,现在才知道人多力量大,好多热心的群友给我了几个解决办法,现在把他们给的shell语句发出来:
代码如下复制代码netstat -antp | grep sshd| awk -F “:” '{print $4}' | awk '{if($0 !~/^$/)print $0}'
netstat -ntlp|grep sshd |awk -F: '{if($4!=“”)print $4}'
netstat -ntlp|grep ^tcp |awk -F: '{if($4!=“”)print $4}'
netstat -ntlp | awk '!a[$NF]++ && $NF~/sshd$/{sub (“.*:”,“”,$4);print $4}'
netstat -antp | grep tcp| awk -F “:” '{print $4}' | awk '{if($0 !~/^$/)print $0}'
好了,就这几个吧,我也懒,不想再去翻聊天记录了,能够解决问题就可以了.
原文转自:blog.slogra.com/post-542.html 感谢站长
【linux中shell 循环处理每天数据linux操作系统】相关文章:
4.excel表格中数据按日期顺序排列处理教程excel办公/数码






文档为doc格式