shell 相关知识(1)

shell自己的能力
     写脚本还行,起码现在现网上跑的自己写的脚本
程序-日志的 定时备份和删除,nfs上海量文件删除和发送邮件。

【data】
export PATH=/mall/jdk/jdk1.7/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export LANG=zh_CN.GB18030

start=`date +%s -d "2011-11-28 15:55:37"`
end=`date +%s -d "2011-11-28 15:55:52"`
echo $(($end-$start))
date "+%Y-%m-%d %H:%M:%S"
date -d ‘+1 day‘ +"%d"   本日+1
date -s 20100405
date -s 14:31:00

1、上个月末
date -d `date +%y%m01`"-1 day" +%d
2、往前倒
date -d -`date +%d`day +%d
3、条件
if [`date +%d -d tomorrow` == 01 ];
4、上个月
date -d last-month
date -d -1month
date -d ‘-1 month‘ +"%m"
5、下个月
date -d next-month
date -d 1month
6、本月初
date -d 1`date +%B`
上个月初
date -d 1`date -d last-month +%B`
指定月份
day -d 1May

echo `date +%d` | xargs -I{} date -d ‘-{} day‘ +%Y%m%d       Linux如何得到上月月末日期

sed -i "3s/.*/$table/g" conf/run.sql
table=t_sms_mt_log_`date +"%m"`    本月,然后月初1号还是统计上月
date -d ‘-1 day‘ +"%m"             本月,实实在在的本月
subject="每日验证码下发数量统计_`date -d ‘-1 day‘ +"%m%d"`"

select * from t_sys_user where user_code=‘duanzz‘;

update  t_sys_user set terminal_id=‘13730000000‘ where user_code=‘duanzz‘;

set fileformat=unix

字符串的截取-替换
echo ${stringa:1}    从第二位一直往后所有
echo ${stringa:2:5}  从第三位往后一共截取5位

echo ${stringZ:(-4)}  从右到左开始截取
echo ${stringZ: -4}   从右到左开始截取,和上面效果一样
a=${stringa%%f}       去掉变量stringa后缀f。
echo ${stringZ/abc/xyz}  变量中字符串   abc被xyz替换
echo ${stringZ/#abc/XYZ} 用‘XYZ‘替换开头的‘abc‘.
echo ${stringZ/%abc/XYZ} 用‘XYZ‘替换结尾的‘abc‘.

you_id=${USER}-on-${HOSTNAME} 
you_id=$USER\-on-$HOSTNAME 
echo $you_id  root-on-db1  效果一样。变量与字符串混合输出
val=${1##+(0)} # 使用局部变量, 匹配最长连续的一个或多个0.

引用:${backup_DIR}/$DATE
#备份的变量:
backup_dir=/home/mysql/mysql_bak
date=`date -d "+%Y%m%d %H:%M:%d"`
yes_time=`date -d yesterday  "+%Y%m%d"`
mkdir -p /opt/chen$date\nailong    chen20160608nailong
date -d "2 day ago" +"%Y-%m-%d"    昨天日期
date -d "1 week ago" +"%Y-%m-%d"   上周日期
date +%Y%m%d%h%M

单引号(‘ ‘)操作与双引号基本一样, 但是不允许引用变量, 因为$的特殊意义被关闭了. 在单引号中,
任何特殊字符都按照字面的意思进行解释, 除了‘. 所以说单引号("全引用")是一种比双引号("部分引
用")更严格的引用方法.

‘‘ 单引号屏蔽所有特殊字符
"" 双引号屏蔽部分特殊字符

【eval】

两次扫描

test.txt内容:hello shell world!

myfile="cat test.txt"

(1)echo $myfile  #result:cat test.txt

(2)eval echo $myfile  #result:hello shell world!

【echo】
echo -e 处理特殊字符,解释特殊字符。生效特殊字符
echo -n 不换行输出
echo -e "a\ndddd" //自动换行
echo $(ls -al)不换行             echo "$(ls -al)" 换行

bash$ echo hello\!
hello!
bash$ echo "hello\!"
hello\!
bash$ echo -e x\ty
xty
bash$ echo -e "x\ty"
x y

echo "chen" >> file :把chen内容追加到file文件中来,不覆盖
echo "chen" > file :覆盖了!!!

[A-Za-z0-9]
截取hello字符串: # VAR=‘hello world!‘ # echo ${VAR:0:5}      hello
截取world字符串: # echo ${VAR:5:-1}      world
截取最后一个字符: # echo ${VAR:(-1)}   !

########################  (( ... ))结构可以用来计算并测试算术表达式的结果.
#!/bin/bash
((5 > 4))
echo $?
echo "Exit status of \"((5 > 4))\" is $?."

【从键盘输入-不止是read】
command << word
any input
word

read -p "Your command: " CMD
until [ $CMD == ‘q‘ ]; do
   ! which $CMD && echo "Wrong command" && read -p "Input again:" CMD && continue
  COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
  bincp $COMMAND
  echo "copy $COMMAND finished."
  read -p "Continue: " CMD
done

【输出到屏幕上】
cat << word
-----------
name     id
word
【脚本中调用】 source _function.sh
【shell函数】
hello ()
{
echo `date`
}
hello    ###这儿直接写hello
`反引号允许你将shell命令的输出赋值给变量
today=`date +%Y%m%d`
echo "today is `date +%Y%m%d`"

sleep 5 #过五秒再执行

【basename】
$ basename /tmp/test/file.txt
file.txt
$ basename /tmp/test/file.txt .txt
file

【dirname】
dirname /var/log/messages   获取文件或文件夹的路径(上一级)
/var/log

【数组】
var=("123" "456" "789")
var[1]=123
var[2]=456
echo "$var[1],$var[2]"
#

echo $?  条件为真,输出0,条件为否,输出1
cp 1.txt /opt/apps/2.txt >/dev/null 2>&1
status=$?
echo $?   #如果cp这个命令成功的话,输出0,不成功的话,输出1

:冒号在此是占位符,{str:=expr} 如果变量str不为空,${str:=expr}就等于str的值,若str为空,就把expr的值赋值给str
: >> target_file  如果这个文件之前并不存在, 那么就创建它
if [ $name="" ] 如果这个变量为空值
then : # 什么都不做,引出分支.
if [ ! -s 22.txt ] 如果22.txt这个文件为空
或者是 if [ -z 22.txt ]

[ $I -eq 1 ] && MIN=$MYRAND
 
if [ -s $name ] 如果这个变量为空
if [ -d $path ] 如果目录存在
if [ -s $path ] 如果目录存在
if [ -n "$1" ]  # 测试是否有命令行参数(非空).
     -a 文件存在     YES !
     -f 这是一个一般文件
     -d 这是一个目录
     -b 这是一个快设备(软盘,硬盘,光驱等)
     -c 这是一个字符设备(键盘,声卡等)
     -p 这个文件是一个管道
     -h 或者 -L 这是一个符号链接
     -r 文件是否可读
     -w 文件是否可写
     -x 文件是否可执行
     -O 你是否为文件拥有者
     -G 文件group-id是否与你相同
f1 -nt f2 文件f1比文件f2新
f1 -ot f2 文件f1比文件f2旧

时间: 2024-12-29 07:26:51

shell 相关知识(1)的相关文章

shell相关知识

在bash shell中,$( )与` ` (反引号)都是用来做命令替换用(command substitution)的.所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行:*完成引号里的命令行,然后将其结果替换出来,再重组命令行.例如: $ echo the last sunday is $(date -d "last sunday" +%Y-%m-%d) 在操作上,用$( )或` `都无所谓,只是我"个人"比较喜欢用$( ),理由是:1,  `

shell 脚本实战笔记(7)--集群网络相关知识和环境搭建

前言: 对网络相关的知识, 做下笔记. 包括IP地址A/B/C的分类, 静态地址的配置/DNS配置, 以及网卡相关信息查看. *) A/B/C/D类网络地址的划分 IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址 IPv4的地址划分, 可以分为5种类型, A/B/C/D/E类 A类地址: 由1字节的网络地址和3字节主机地址组成, 网络地址最高位必须是"0", 地址范围从1.0.0.0到126.0.0.0. A类网络有126个, 每个网络能容纳1亿多个主机. B类

shell脚本相关知识

一. 关于shell shell,一种壳层与命令行界面,是Unix操作系统下传统的用户和计算机的交互界面.第一个用户直接输入命令来执行各种各样的任务. 普通意义上的shell就是可以接受用户输入命令的程序.它之所以被称作shell是因为它隐藏了操作系统低层的细节.同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做"虚拟shell"或"图形shell". 我们Linux操作下的终端,就是关于shell解释行的命令解释,是交互式.但是在我们的终端下进行的命令

Shell基础知识

防伪码:长风破浪会有时,直挂云帆济沧海. 1.1 l Shell  简介 Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell 既然是工作在 Linux 内核之上,那我们也有必要知道下 Linux 相关知识. Linux 是一套免费试用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户.多

(整理)ubuntu 的 相关知识(来自 鸟哥的私房菜)

1. Linux 文件权限概念 $ ls 察看文件的指令 $ ls -al 出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件) 在你第一次以root身份登入Linux时, 如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思: 图2.1.1.文件属性的示意图 第一栏代表这个文件的类型与权限(permission): 这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:(图2.1.1及图2.1.2内的权限并无关系) 图2

Sox语音转换的相关知识

SoX-linux 里操作音频的瑞士军刀 Sox是最为著名的Open Source声音文件 格式转换工具.已经被广泛移植到Dos.windows.OS2.Sun.Next.Unix.Linux等多个操作系统 平台.Sox项目是由Lance Norskog创立的,后来被众多的开发 者逐步完善,现在已经能够支持很多种声音文件格式和声音处理效果.基本上常见的声音格式都能够支持.更加有用的是,Sox能够进行声音滤波.采样频率转换,这对那些从事声讯平台开发或维护的朋友非常有用.当然,Sox里面也包括一些D

Linux用户及权限相关知识

linux用户及相关知识 一.相关名词解释 每一个用户名都对应一个用户ID即UID,主机通过用户名解析成UID进行用户识别. 每一个用户组名都对应一个组ID即GID,主机通过用户组名解析成GID进行用户识别. 1.名称解析:将用户名和UID进行转换. 2.用户认证:验证该用户是否具有该权限登陆该主机. 3.用户授权:该用户是否有权限访问该文件. 4.审计:记录该用户在当前系统的行为. 5.认证机制 :linux默认的认证机制 shadow   影子口令 [[email protected]/]#

第一章 Shell基础知识

1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell既然是工作在Linux内核之上,那我们也有必要知道下Linux相关知识. Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 1983年9月27日,Richard Stallman(理查德

无线性能测试相关知识

几个容易混淆的概念: 备注:灰度测试,小部分的投放市场,大部分用户采用原来的应用,小部分的采用新版本. 性能测试和负载测试等的主要区别是目的不同 负载测试是通过改变系统负载方式.增加负载等来发现系统中所存在的性能问题.负载测试是一种测试方法,可以为性能测试. 压力测试所采用.负载测试的加载方式也有很多种,可以根据测试需要来选择. 性能测试是为获取或验证系统性能指标而进行测试(特定负载).多数情况下,性能测试会在不同负载情况下进行. ·压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地