zoukankan      html  css  js  c++  java
  • shell学习

    set -x 进入调试模式,会把每一个命令实际执行的命令打印出来,也就是会把一些参数扩展后的样子打印出来.
    set +x 退出调试模式
    自定义变量:
    x=7,y=8
    echo `expr $x + $y` #会输出15 如果发现一些奇怪的输出,可能是由于空格导致的,所以试着加上或去掉空格
    message="hello world"
    echo $message 或者 echo ${message}
    echo "$message"999
    echo ${messsage}999
    unset message #删除一个变量
    shell的=左右不可以有空格,它会认为这是一个命令
    set 这个命令会把所有的变量还有函数等都打出来
    env会把系统变量打出来
    pstree 会打印线程树
    echo ${#message} 打印出字符串的长度
    echo ${message:2} 会打印llo world
    echo ${message:2:3} 会打印llo
    echo ${message#h*l} 会打印lo world
    echo ${message##h*l} 会打印o world 上面俩个的差别是#是最短匹配, ##是最长匹配 然后把匹配到的去掉
    echo ${message/l/L} 会打印heLlo world
    echo ${message//l/L} 会打印heLLo world
    环境变量和自定义变量的区别是,环境变量是可以向子shell传递的,自定义变量不能传递.
    使用export声明环境变量 在子系统中把父系统的环境变量删掉,在父系统中这个环境变量任然在.
    $1-9,传入的参数,${10}以后需要加括号,$*,$@可以拿到所有的参数,$#可以拿到参数的个数,$?返回上条命令执行是否成功
    echo $$ 打印出当前进程的pid
    echo $! 打印出后台运行程序的pid
    && || 也可以当做条件语句来使用
    declare -给变量声明类型, +给变量声明类型, -a声明为数组, -i声明为整数, -x声明为环境变量, -r声明为只读变量, -p显示被声明的类型
    declare -i y=10
    declare -i z=19
    declare -i x=$y+$z
    mesgs[0]="h"; mesgs[1]="q"; 直接这样也可以声明为数组 echo${msgs[1]} 这样对打印第二个元素 直接 echo mesgs会打印第一个元素 echo ${mesgs[*]}会把所有的元素都打印出来 还可以直接 msg=(0 1); 来声明一个数组
    ${#mesgs[@]} 或者 ${#mesgs[*]} 来打印数组的长度
    num1=1 num2=2 num3=$(($num1+$num2)) echo $num3 会打印出来3 还有上面那种expr的方式来进行数值运算 还可以 let num3=num1+num2, 和前面的效果一样
    str=abcdefg expr length $str 会打出str的长度, expr index $str "a" 会打出a的index , expr substr "$str" 1 3 会打出abc
    条件语句:
    if [ cond ] ; then
    ...
    fi
    if [ cond ]
    then
    ...
    if
    if [ cond ]
    then
    ..
    else
    ..
    fi

    if [ cond ]
    then
    ..
    elif[ cond ]
    then
    ..
    fi
    上面的cond还可以这样: cond1 -a cond2 逻辑与
                          cond1 -o cond2 逻辑或
                          !cond 逻辑非
    文件判断: -b 是否为块设备文件
              -c 是否为字符设备文件
              -d 是否为目录
              -e 是否存在
              -f 是否是普通文件
              -L 是否为连接文件
              -p 是否为管道文件
              -s 是否为空
              -S 是否为套接字文件
    判断文件权限: -r 是否可读
                  -w 是否可写
                  -x 是否可执行
                  -u 是否suid权限
                  -g 是否有sgid权限
                  -k 是否有sbid权限
                file1 -nt file2 #file1修改时间是否比file2新
                file1 -ot file2 #file2修改时间是否比file2旧
    判断数字:    -eq 判断是否相等
                 -ne 判断是否不相等
                 -gt 判断是否大于
                 -lt 判断是否小于
                 -ge 判断是否大于等于
                 -le 判断是否小于等于
    判断字符串:  -z 判断字符是否为空
                 -n 判断字符是否为非空
                 == 判断字符串是否相等
                 != 判断字符串是否不相等
    case 语句的语法:
     case $var in
     "val1") <---------这里的condition必须是常量
     commands
     ;;
     "val2")
     commands
     ;;
     *)
     commands
     ;;
     esac
    for循环:
    for var in var1 var2 var3...
    do
    ...
    done
    s=0
    for((i=1;i<=100;i++))
    do
    s=$(($s+$i))
    done
    echo "sum is:$s"
    $*和$@的区别:
       不加引号的时候,这俩个是一样的.如果加上引号: "$*" "$@" 后,"$*"会把$*里的元素当做一个整体,而"$@"不会
    while [cond]
    do
    ...
    done
    i=0
    while [ i -le 100 ]
    do
     i=$(($i+1))
    done
    until [ i -ge 100 ]
    do
     i=$(($i+1))
    done
    接受键盘收入:
     read 命令:
         -p 提示信息
         -t 等待秒数
         -n 输入的字符数
         -s 隐藏输入
     read -p "输入你的name" -t 30 name
     echo $name
     read -p "输入密码" -s passward
     echo -e ' '
     echo $passward

    shell函数:
    #!bin/sh
    sum 1 2; <---------这里调用不到这个函数,因为还没扫描到这个函数
    function sum()
    {
     echo $(($1+$2))
     return 0;
    }
    sum 1 3; <--------这里可以调用到这个函数

  • 相关阅读:
    Orcle 导入数据eurusd.ctl
    Maven系列2pom.xml 配置详解
    UML关联&泛化的区别
    maven 创建工程
    maven 打包
    jprofiler安装和配置
    设计模式出现之前的几大原则
    检查启动情况linux
    领域模型
    解压命令tar
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/6001854.html
Copyright © 2011-2022 走看看