linux shell记录
来源:互联网 发布:c语言预处理指令 编辑:程序博客网 时间:2024/05/16 04:40
#-------- 《一》 变量定义sex="boy"result=$[1+2] #[]可以对变量输出 也可以进行数学运算 比如 a=1 b=2 echo[b]结果为2 echo $[a+b] 结果为3echo $sex;echo ${sex} # {}用于获取变量的值输出 可以进行截取操作 不能进行数学运算echo `wc -l ~/.bash_profile`rowcount=`wc -l ~/.bash_profile`rowcount=$(wc -l ~/.bash_profile) #两句是等价的 $()和``中都可以执行命令#数字变量操作i=1i=i+1 #这里i不是等于2 i就是等于字符串的"i+1" 所以要进行数学运算有几种方式#下面三种方式 都可以实现 i++i=$[i+1]let i=i+1 #或者 let i++((i++)#双引号使用的变量 可以直接解析jiaozi="i am a ${sex}";#单引号所有内容不解析cherry='i am a ${sex}';echo $jiaozi;echo $cherry;#--------《二》字符串处理#1>返回总长度 ``执行字符串中的命令 echo ${#cherry}echo `expr length 123`#2>截取字符串 表示从1开始的2个长度echo ${jiaozi:1:2}echo `expr substr "abc" 1 2`#3>获取一个字符串b在另一个字符串abc中的的位置 索引从1开始echo `expr index abc b`#4>切割字符串 比如通过 :切割 abc:bcdecho abc:bcd | cut -d: -f1 #这里 -d后面表示切割的符号 -f1表示输出第一个切割的字符 这里就是abc 如果是f2就是bcd#5>去除空格 echo自带去空格功能echo `"echo test "`#6>转换大写 输出BCD echo bcd | tr '[a-z]' '[A-Z]'#7>转换小写 输出bcd[root@bogon shell]# echo bcD | tr 'A-Z' 'a-z'#8替换字符串 定义一个变量 将test变量的值中的yy替换成ptest="abyyef"||echo ${test/yy/p}#--------《三》类型转换#1数字 4舍五入 num=12.456 printf "%4.2f\n" ${num} #保留4位 2位小数 fnum=`printf "%4.2f" ${num}` #结果写入变量fnum#2 日期格式化 date "+%Y-%m-%d %H:%M:%S" curTime=`date "+%Y-%m-%d %H:%M:%S"`#--------《四》数组arr=(1 2 3 4 bcd) #初始化数组 数组是自动扩容的arr[1]=3arr[b]=234 #键可以是字符串也可以是数字 类似java的map类型echo ${arr[1]} #输出内容echo ${#arr[*]} #获取数组的长度echo `expr 2 + 3`#--------《五》流程控制#1>if语句a=10mysex="男"# -a表示逻辑与 -o表示逻辑或 !表示非 数字的比较 -eq相等 -gt大于 -lt小于 字符串比较相等 = 或者 !=# []中间的每一个符号和单词都需要有一个空格不然报错 then放在写一行 如果需要在同一行 带一个; 比如;thenif [ $mysex = "男" -a ! $a -gt 20 ]then echo "没钱男性同胞"fi#文件的检测 -r 可读 -w 可写 -x 可执行 -e表示是否存在文件file="/root/shell/var.sh"if [ -r $file -a -w $file ] then echo "文件是可读的"fiif test -w $file then echo "文件是可写的"fi#---------- if和 elif 和else的用法 test和[]用法是一致的 case的用法参考《六》方法章节sex=1if test $[sex] -eq 0then echo "man"elif test ${sex} -eq 1then echo "woman"else echo "nosex"fi#1>循环语句#-for循环 for t in 1 2 3 4do echo $tdone#-while循环i=1while(( $i<=10 ))do echo $i let i++ #或者 let i=i+1done#--------《六》方法start(){ echo "hello function"}start #表示调用一个没有参数和返回值的方法#$1表示第一个参数 $n表示第n个参数add(){ let i=$1+$2 echo "参数的个数为 : $#" case $# in 1) echo "参数个数少于2个" ;; 2) echo "参数个数正确" ;; esac echo "当前进程编号 $$" return $i}add 23 45# $?表示返回值echo "结果为:$?"#--------《七》流输入和输出(文件操作)#控制台输入值到mysex变量read mysex # command > 文件 将命令输出的内容重定向到文件中 控制台不在输出 >覆盖文件 >>追加内容不覆盖ifconfig > /my.logifconfig >> /my.log# command <文件 读取文件的内容给命令处理 wc -l < /my.log#如果希望控制台和文件都不输出echo 'a'>/dev/null#循环读取每一行 for循环 按照空格切分来读 不是每行读取一次 for i in `cat /my.log` do echo $i done#read直接从 <定向流或者cat结果中读取数据 while read pline do echo $pline done < /my.log cat /my.log | while read pline do echo $pline done #--------《八》定时调度(多线程)创建 cron文件 vi my.cron #文件中写入下面的内容 */1 * * * * echo aa >> /my.log #每1分钟执行此后面的echo命令 crontab ./my.cron #读取文件 自动开启该脚本执行 crontab -l #显示所有的执行的任务 crontab -r # 删除所有的定时任务 # cron文件的时间的解释 # 分钟 小时 天 月份 星期 命令 # 合法值为:00-59 00-23 01-31 01-12 0-6 (0是周日) # 除了数字还有几个特殊的符号:"*"、"/"和"-"、"," # *代表所有的取值范围内的数字 # "/"代表每的意思,"/5"表示每5个单位 # "-"代表从某个数字到某个数字 # ","分开几个离散的数字 # 比如 # */1 12-24 * * * #表示每分钟都会执行 12-24只有每天下午 12点到晚上24点 合并就是每天的12-24点的每一分钟都执行一次 # *代表所有的时间范围 可以用-指定范围#--------《九》网络请求 wget用于发送请求获取结果 -d 打印调试信息 包括请求头和响应头都会输出 -spider 不输出到文件中 --header 设置请求头 wget -S --spider https://www.baidu.com/ wget -S --spider --header="User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" http://blog.csdn.net/xifeijian/article/details/9399121 获取网页内容 使用命令 curl ip或者域名 比如 curl www.baidu.com #--------使用shell命令添加window服务写一个java的main方法程序 main方法发布一个webservice 上传到linux后 需要 通过 service myjar start 启动该jar包服务#--------《十》实战#-使用shell命令添加window服务写一个java的main方法程序 main方法发布一个webservice 上传到linux后 需要 通过 service myjar start 启动该jar包服务#linux的 /etc/init.d下面创建文件 myjar 添加以下内容 假设java代码打jar包为w.jar 上传到/root/shell目录package cn.et.wbe;import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;@WebServicepublic class TestWeb {@WebMethodpublic int add(int p1,int p2){return p1+p2;}public static void main(String[] args) {Endpoint.publish("http://192.168.58.132:8888/test?wsdl", new TestWeb());//这里linux服务器的ip是192.168.58.132}}myjar 文件的内容为appDir="/root/shell"start(){ if test -e $appDir/w.id then echo "服务已启动 请使用restart命令" return fi java -jar $appDir/w.jar >> $appDir/w.out& #通过ps -ef找到java命令 空格切割第二个就是进程号 pid=`echo \`ps -ef | grep java\` | cut -d" " -f2` echo $pid>$appDir/w.id }stop(){ pid=`cat $appDir/w.id` if test ! -e $appDir/w.id then echo "服务没有启动" return fi kill $pid rm -rf $appDir/w.id}restart(){ return}status(){if test -e $appDir/w.id then echo "已启动" else echo "已关闭" fi}case $1 in start) start;; stop) stop;; restart) restart;; status) status;;esac将服务添加到系统服务 在开机后自动启动在myjar文件最上面添加 表示在 2345运行级别都可以运行 否则抛出service myjar does not support chkconfig#chkconfig: 2345 10 90#description: Jiaozi Serverchkconfig -add myjar #添加到系统服务chkconfig myjar on #开机启动chkconfig --list 查看所有系统服务列表
可以看到 1-6级别下是否会自动启动 myjar文件开头是2345
myjar 0:off 1:off 2:on 3:on 4:on 5:on 6:off
其他命令总结
1》awk命令
awk用于文件的统计 通过文件换行为切割符 将文件切换为多行后 每行执行自定义的awk脚本语句处理 awk脚本类似于一个脚本语言 支持变量定义 流程控制等 每一行也可以使用 -F指定切割符 来切割 $0表示当前行的所有数据 $1表示第一个切割的字符串 比如:
查看正在运行所有sbin目录下可执行程序
[root@ha1 /]# ps -ef | grep sbinroot 1 0 0 06:02 ? 00:00:01 /sbin/initroot 497 1 0 06:02 ? 00:00:00 /sbin/udevd -droot 1200 1 0 06:03 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth1.leases -pf /var/run/dhclient-eth1.pid eth1root 1286 1 0 06:03 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5root 1352 1 0 06:03 ? 00:00:00 /usr/sbin/sshdroot 1473 1 0 06:03 tty2 00:00:00 /sbin/mingetty /dev/tty2root 1475 1 0 06:03 tty3 00:00:00 /sbin/mingetty /dev/tty3root 1477 1 0 06:03 tty4 00:00:00 /sbin/mingetty /dev/tty4root 1479 1 0 06:03 tty5 00:00:00 /sbin/mingetty /dev/tty5root 1486 497 0 06:03 ? 00:00:00 /sbin/udevd -droot 1487 497 0 06:03 ? 00:00:00 /sbin/udevd -droot 1488 1 0 06:03 tty6 00:00:00 /sbin/mingetty /dev/tty6root 2234 1701 0 07:40 pts/1 00:00:00 grep sbinawk默认的列分隔符 就是 \t也就是tab制表符 比如需要输出进程编号和执行文件路径
[root@ha1 /]# ps -ef | grep sbin | awk '{print $2 "\t" $8}'1 /sbin/init497 /sbin/udevd1200 /sbin/dhclient1286 /sbin/rsyslogd1352 /usr/sbin/sshd1473 /sbin/mingetty1475 /sbin/mingetty1477 /sbin/mingetty1479 /sbin/mingetty1486 /sbin/udevd1487 /sbin/udevd1488 /sbin/mingetty2264 grep
awk的语法特征 所有代码块 在{}中 BEGIN{}表示循环之前 END{} 表示循环之后 比如这里统计sbin执行程序的总共个数
[root@ha1 /]# ps -ef | grep sbin | awk 'BEGIN { count=0 } {count=count+1} END {print count}'13awk中可以定义数组 执行循环等
内置变量表
属性说明$0当前记录(作为单个变量)$1~$n当前记录的第n个字段,字段间由FS分隔FS输入字段分隔符 默认是空格NF当前记录中的字段个数,就是有多少列NR已经读出的记录数,就是行号,从1开始RS输入的记录他隔符默 认为换行符OFS输出字段分隔符 默认也是空格ORS输出的记录分隔符,默认为换行符ARGC命令行参数个数ARGV命令行参数数组FILENAME当前输入文件的名字IGNORECASE如果为真,则进行忽略大小写的匹配ARGIND当前被处理文件的ARGV标志符CONVFMT数字转换格式 %.6gENVIRONUNIX环境变量ERRNOUNIX系统错误消息FIELDWIDTHS输入字段宽度的空白分隔字符串FNR当前记录数OFMT数字的输出格式 %.6gRSTART被匹配函数匹配的字符串首RLENGTH被匹配函数匹配的字符串长度SUBSEP\034阅读全文
1 0
- [linux]shell脚步记录
- Linux Shell 基础记录
- Linux Shell编程记录
- Linux shell 知识记录
- linux shell记录
- Linux shell命令记录
- linux shell 实用编程记录
- linux shell学习记录(一)
- linux shell编程学习记录
- Linux学习记录--shell介绍
- Linux学习记录--shell变量
- Linux学习记录--shell script
- linux shell命令(记录)
- linux bash shell 简单记录
- linux shell 用syslog记录日志
- Linux Shell Scripting Cookbook 学习记录1
- Linux Shell 命令记录概略:一
- Linux Shell 命令记录概略:二
- java中多线程概述
- 神一般的 str.format() 函数
- bootstrap学习之基础
- thinkphp在ubuntu下验证码无法加载或者验证码错误问题的解决
- javascript是最常用的脚本语言100多个基础常用JS函数和语法集合大全
- linux shell记录
- 通过samba实现虚拟机中ubuntu与主机win7文件共享
- bzoj 1303: [CQOI2009]中位数图 (乱搞)
- MySQL用户设置密码后,如何免密登录?(~/.my.cnf)
- 2017年六月六日 NO.8 HTML(七)——表单(笔记)
- 常见MySQL数据类型
- 使用RestTemplate访问restful服务
- 学习线程池笔记1
- io理解