zoukankan      html  css  js  c++  java
  • shell 知识

    variable 是变量名
    $variable 是变量值  ${variable}
    unset 变量名  清除变量的值
    variable ? value / variable : ?value 对未赋值的 variable,显示系统错误信息
    variable:= value 对未赋值的 variable,把value 值赋给它
    variable :-value 对未赋值的 variable,把value 值赋给它,但不保存在其空间地址上
    只读变量,不能改值
    variable =value
    readonly variable
    妈的,变量赋值与之相关的,居然不让给有空格,真扯蛋
    变量默认是字符型的,所以如果要进行四则运行,
    则如下:
    a=number;
    let "a+=10"
    echo $a
    
    declare -i 变量名
    把变量转为整形,其实当进行四则运算时,才会实现真正的转换
    declare -r 变量名
    把变量设置为只读
    
    变量是无类型的,是弱类型的,所以如果没有定义或为空的变量,默认为字符0/数字0
    
    列出所有的全局变量
    env
    
    声明一个为全局变量
    APPSPATH=/usr/local #声明一个变量
    export APPSPATH  # 声明为全局变量
    echo $APPSPATH
    
    清除环境变量
    unset APPSPATH
    
    其中
    PATH全局变量是记录了可执行的文件路径,每个路径是用冒号分开,如果要添加新的路径,可以用
    export PATH = "/新目录名":$PATH
    
    参数:
    ($0表示脚本名,)
    $1....n 表示第几个参数
    $*/$@:表示所有的参数
    $#表示参数的总数
    $?表示是否有错误,无时则返回0,
    bash.sh内容如下:
    #!bash.sh
    echo "the script name is $0"
    echo "the first paramter is $1"
    echo "the total paramters is $#"
    echo "the paramters are $@"
    echo "the paramters are $*"
    
    单引号,双引号
    单引号不解释变量,并且不会输出格式化的,如PHP中的源代码与浏览器的一样,双引号会解释其中的变量,并连格式化也一并输出
    
    变量在命令替换上有三种情况可以使用:
    $var/$(var)/`var` 其中`var`不格式化 $var 格式化 
    as:
    for file $(ls)
    do
    echo $file
    done
    -----------------
    for file `ls`
    do
    echo $file
    done
    ---------------- 其中的 ls 为查看文件的列表 退出,查看是否上一步的操作是否有错误 echo $? 如果没有错误,则为 0 num1=100 num2=99 $num1 -eq $num2 :如果相等,则 echo $? 为0 $num1 -ge $num2 : 如果num1 >= num2,则echo $? 为0 $num1 -gt $num2; 如果是 num1 > num2,则 echo $? 为0 $num1 -le $num2, $num1 -lt $num2, $num1 -neq $num2 类似 以上只适用于整数来说的,对于浮点数不行,有专门的函数可用 以上还可以用 [ "$num1" -eq "$num2" ]来代替 test $num1 -eq $num2,方括号之间必须要有空格分格 字符测试 string:测试字符串 string 是否不为空,此字符不能用 [ "$string" ] -n string:测试字符串string是否不为空 -z string:测试字符串 string是否为空 string1=string2:测试两字符是否相等 string1!=string2:测试两字符是否不相等 测试文件 test -d file 测试file 是否目录 test -e file 测试file 是否存在 test -f file 测试 file 是否为文件 test -r file 测试file 是否是进程可读文件 test -s file 测试file 的长度是否不为0 test -w file 测试file 是否是进程可写文件 test -x file 测试file 是否是进行可执行文件 test -L file 测试file 是否符号化链接 逻辑运算 ! expression 为非 -a expression 为 and -o expression 为or 条件判断 if express then string fi 或者 if express;then string fi 可以嵌套 if expression then if express then else .... fi else ... fi 或者: if express then ... elif expression then .... elif expression then ... else ... fi case 语法 case "$var" in value1) ....;; value2) ...;; .......... *) ........ esac as: #!/bin/bash echo "input a number" read ok case "$ok" in 1) echo "1";; 2) echo "2";; *) echo "0000" esac exit status 可自定义,在文档中用 echo $?可测试其中的输出值 for 循环有三种结构 1。列表for 循环结构 2.不带for 列表循环 3.类C风格的for 循环 1.as: #!/bin/bash for var1 in 1 2 3 4 do echo "$var1" done 会输出 1 2 3 4 ====================== for var2 in {1..6} do echo $var2 done 会输出 1 2 3 4 5 6 ----------------- for var3 in {1..6..2} # 步长为2 do echo $var3 done 会输出 1 3 5 ------------------ sum=0 for var4 in {1..100} do let "sum+=$var4" done 累加1到100 ============ for file in $( ls ) do echo $file done 会输出文件列表 ============ echo "input the argument:$#" for arg in "$*" do echo "$arg" done 运行如下: ./bash.sh a b c 其中 a b c 为其中的参数 ================= 2.不带列表的 for 其实与上面的一个样子的 as: #!/bin/bash echo "input the number:" echo "it is : " for arg do echo $arg done ========== 3.类C风格 for ((expre1; expre2; expre3)) do ... done as: for((var1=1; var1 <= 5; var1++)) do echo $var1 done ------------- while 循环 while(( express )) do ... done as: abc=1
    #可以写成 while [[ $abc<=5 ]] 最左边的方括号与while要有间隔,中间的左右方括号也得与条件语句有间隔 while(( abc<=5)) do echo $abc let "abc++" done ========== until as: until [[ express ]] do ..... done ----------- as : i=0 until [[ "$i" < 5 ]] do echo $i let "i++" done =========== 嵌套 for((var1=1;var1 <= 9; var1++)) do for((var2=1; var2 <= 9; var2++)) do let "temp=var1*var2" echo -n "$var1*$var2 = $temp " done done ========== 可以加入 break/continue as while [[ $var > 10 ]] do if [ $var -eq 5] then break/continue fi done ----------- select结构 as: select variable in {ls} do .... done as: select color in "red" "blue" "yellow" do break done echo "this color is $color" =========== 也可以不带参数的: select color do break done echo "the color is $color" as: ./bash.sh a b c ==================
  • 相关阅读:
    shiro什么时候会进入doGetAuthorizationInfo(PrincipalCollection principals)
    Kali2安装完成后的设置
    Springboot打包war
    2017总结及2018计划
    gitlab数据库
    Entity Framework学习
    从零开始编写操作系统——bochs
    Docker基本操作
    Jenkins打包安卓时提示没同意constraintLayout的license的解决方法
    env:bash 解决
  • 原文地址:https://www.cnblogs.com/lin3615/p/4199483.html
Copyright © 2011-2022 走看看