zoukankan      html  css  js  c++  java
  • linux shell记录

    #-------- 《一》 变量定义
    sex="boy"
    result=$[1+2]  #[]可以对变量输出 也可以进行数学运算 比如 a=1 b=2 echo[b]结果为2 echo $[a+b] 结果为3
    echo $sex;
    echo ${sex}    # {}用于获取变量的值输出 可以进行截取操作 不能进行数学运算
    echo `wc -l ~/.bash_profile`
    rowcount=`wc -l ~/.bash_profile`
    rowcount=$(wc -l ~/.bash_profile) #两句是等价的 $()和``中都可以执行命令
    #数字变量操作
    i=1
    i=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:bcd
    echo 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替换成p
    test="abyyef"||echo ${test/yy/p}
    
    #--------《三》类型转换
    #1数字 4舍五入
      num=12.456
      printf "%4.2f
    " ${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]=3
    arr[b]=234  #键可以是字符串也可以是数字 类似java的map类型
    echo ${arr[1]}  #输出内容
    echo ${#arr[*]}  #获取数组的长度
    echo `expr 2 + 3`
    
    #--------《五》流程控制
    #1>if语句
    a=10
    mysex="男"
    # -a表示逻辑与  -o表示逻辑或 !表示非  数字的比较 -eq相等 -gt大于 -lt小于 字符串比较相等 = 或者 !=
    # []中间的每一个符号和单词都需要有一个空格不然报错 then放在写一行 如果需要在同一行 带一个;  比如;then
    if [ $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 "文件是可读的"
    fi
    
    if test -w $file 
    then
      echo "文件是可写的"
    fi
    #---------- if和 elif 和else的用法  test和[]用法是一致的  case的用法参考《六》方法章节
    sex=1
    if test $[sex] -eq 0
    then
      echo "man"
    elif test ${sex} -eq 1
    then
     echo "woman"
    else
     echo "nosex"
    fi
    #1>循环语句
    #-for循环 
    for t in 1 2 3 4
    do
     echo $t
    done
    
    #-while循环
    i=1
    while(( $i<=10 ))
    do
      echo $i
      let i++  #或者 let i=i+1
    done
    
    #--------《六》方法
    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.log
    ifconfig >> /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;
    
    
    @WebService
    public class TestWeb {
    	@WebMethod
    	public 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 Server
    
    
    chkconfig -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 sbin
    root         1     0  0 06:02 ?        00:00:01 /sbin/init
    root       497     1  0 06:02 ?        00:00:00 /sbin/udevd -d
    root      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 eth1
    root      1286     1  0 06:03 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1352     1  0 06:03 ?        00:00:00 /usr/sbin/sshd
    root      1473     1  0 06:03 tty2     00:00:00 /sbin/mingetty /dev/tty2
    root      1475     1  0 06:03 tty3     00:00:00 /sbin/mingetty /dev/tty3
    root      1477     1  0 06:03 tty4     00:00:00 /sbin/mingetty /dev/tty4
    root      1479     1  0 06:03 tty5     00:00:00 /sbin/mingetty /dev/tty5
    root      1486   497  0 06:03 ?        00:00:00 /sbin/udevd -d
    root      1487   497  0 06:03 ?        00:00:00 /sbin/udevd -d
    root      1488     1  0 06:03 tty6     00:00:00 /sbin/mingetty /dev/tty6
    root      2234  1701  0 07:40 pts/1    00:00:00 grep sbin
    awk默认的列分隔符 就是 也就是tab制表符 比如需要输出进程编号和执行文件路径

    [root@ha1 /]# ps -ef | grep sbin | awk '{print $2 "	" $8}'
    1       /sbin/init
    497     /sbin/udevd
    1200    /sbin/dhclient
    1286    /sbin/rsyslogd
    1352    /usr/sbin/sshd
    1473    /sbin/mingetty
    1475    /sbin/mingetty
    1477    /sbin/mingetty
    1479    /sbin/mingetty
    1486    /sbin/udevd
    1487    /sbin/udevd
    1488    /sbin/mingetty
    2264    grep
    

    awk的语法特征 所有代码块 在{}中 BEGIN{}表示循环之前  END{} 表示循环之后  比如这里统计sbin执行程序的总共个数

    [root@ha1 /]# ps -ef | grep sbin | awk 'BEGIN { count=0 } {count=count+1} END {print count}'
    13
    awk中可以定义数组 执行循环等 

    内置变量表

    属性 说明
    $0 当前记录(作为单个变量)
    $1~$n 当前记录的第n个字段,字段间由FS分隔
    FS 输入字段分隔符 默认是空格
    NF 当前记录中的字段个数,就是有多少列
    NR 已经读出的记录数,就是行号,从1开始
    RS 输入的记录他隔符默 认为换行符
    OFS 输出字段分隔符 默认也是空格
    ORS 输出的记录分隔符,默认为换行符
    ARGC 命令行参数个数
    ARGV 命令行参数数组
    FILENAME 当前输入文件的名字
    IGNORECASE 如果为真,则进行忽略大小写的匹配
    ARGIND 当前被处理文件的ARGV标志符
    CONVFMT 数字转换格式 %.6g
    ENVIRON UNIX环境变量
    ERRNO UNIX系统错误消息
    FIELDWIDTHS 输入字段宽度的空白分隔字符串
    FNR 当前记录数
    OFMT 数字的输出格式 %.6g
    RSTART 被匹配函数匹配的字符串首
    RLENGTH 被匹配函数匹配的字符串长度
    SUBSEP 34
    2》sed命令

     流式编辑器  可以动态替换文件内容 参考
     
    http://www.runoob.com/linux/linux-comm-sed.html






  • 相关阅读:
    访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
    Python获取指定文件夹下的文件
    逗号引起的大坑,str进去,tuple出来,为啥
    Python代码调用JS函数
    Key没有引号的K-V格式字符串,怎么转换成Json/dict
    Redis设置密码和取消密码
    elasticsearch 查询(match和term)
    bat 拾遗
    windows下elasticsearch5.X安装IK分词器
    pycharm 右键为什么会出现 "Run Twisted Trial in testxxx.py"
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331218.html
Copyright © 2011-2022 走看看