zoukankan      html  css  js  c++  java
  • 【shell】【二】基本命令

    1、新建test.sh文件

    vim test.sh
    进入vim界面,i进入编辑模式,输入下面的代码,然后esc,进入底部命令模式,然后:wq!强制保存并退出。
    1 #!/bin/bash
    2 echo "hello word"
    或者直接用sublime等新建后缀是.sh的文件。

    2、给.sh文件添加可执行权限

    1 chmod +x ./test.sh  #使脚本具有执行权限
    2 chmod 777 ./test.sh #777可读可写可执行
     
     

    3、运行该文件

    1 ./test.sh #执行脚本
     

    4、shell变量

    4.1.定义变量时,变量名不加美元符号

    1 your_name="runoob.com"
    2 
    3 有效的变量名称:
    4 RUNOOB
    5 LD_LIBRARY_PATH
    6 _var
    7 var2
    定义变量规则:
    • 变量名和等号之间不能有空格
    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    4.2.使用变量

    以下两种输出方式都ok,但是尽量用第二种
    your_name="runoob.com"
    echo $you_name
    echo ${you_name}
    echo I am good at ${you_name}Script .     会输出完整的句子
    echo I am good at $you_name Script 。     会将you_name理解为新的变量,值为空

    4.3.只读变量

    1 #!/bin/bash
    2 myUrl="http://www.google.com"
    3 readonly myUrl
    4 
    5 
    6 运行脚本会报错
    7 /bin/sh: NAME: This variable is read only.

    4.4.删除变量

    #!/bin/sh
    myUrl="http://www.runoob.com"
    unset myUrl
    echo $myUrl
    
    注意:unset不能删除只读变量
     

    4.5.变量类型

    • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    4.6.字符串操作

     1 获取字符串长度#
     2 string="abcd"
     3 echo ${#string} #输出 4
     4 
     5 截取字符串
     6 string="runoob is a great site"
     7 echo ${string:1:4} # 输出 unoo
     8 
     9 查找子字符串
    10 string="runoob is a great site"
    11 echo `expr index "$string" io`  # 输出 4
    12 注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

    5、数组

     
    数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)
    Shell 数组用括号来表示,元素用"空格"符号分割开
     1 定义数组,在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
     2 数组名=(值1 值2 ... 值n)
     3 array_name=(value0 value1 value2 value3)
     4 或者
     5 array_name=(
     6 value0
     7 value1
     8 value2
     9 value3
    10 )
    11 或者
    12 array_name[0]=value0
    13 array_name[1]=value1
    14 array_name[n]=valuen
    15 
    16 读取数组
    17 valuen=${array_name[n]}
    18 
    19 使用 @ 符号可以获取数组中的所有元素,例如:
    20 echo ${array_name[@]}
    21 
    22 
    23 # 取得数组元素的个数
    24 length=${#array_name[@]}
    25 # 或者
    26 length=${#array_name[*]}
    27 # 取得数组单个元素的长度
    28 lengthn=${#array_name[n]}
    29 
    30 
    31 例子
    32 arr=(9 2 'Aaa' 'B')
    33 echo ${arr[@]}
    34 echo ${arr[*]}
    35 len=${#arr[*]}
    36 echo $len
    37 echo "数组元素个数为: ${#arr[@]}"
    38 
    39 
    40 输出=========
    41 ./test2.sh 
    42 9 2 Aaa B
    43 9 2 Aaa B
    44 4
    45 数组元素个数为: 4

    6、注释

     1 单行注释
     2 #--------------------------------------------
     3 # 这是一个注释
     4 # author:菜鸟教程
     5 多行注释
     6 :<<EOF
     7 注释内容...
     8 注释内容...
     9 注释内容...
    10 EOF
    11 或者
    12 :<<'
    13 注释内容...
    14 注释内容...
    15 注释内容...
    16 '
    17 
    18 :<<!
    19 注释内容...
    20 注释内容...
    21 注释内容...
    22 !

    7、Shell 传递参数

     1 1、传递参数
     2 echo "hi,no: $0"
     3 echo "hi,no: $1"
     4 echo "hi,no: $2"
     5 
     6 运行
     7 ./test1.sh 'one' 'two' 'three'
     8 
     9 Hello World !
    10 hi,no: ./test1.sh    -- 会把运行的那个文件名默认是第0个字段
    11 hi,no: one
    12 hi,no: two
    13 
    14 
    15 2、$*与$@的区别
    16 都是引用所有的参数,但是$*是把出入的参数当成一个字符串去展示,$@当成一个个的字符
    17 echo "-- $* 演示 ---"
    18 for i in "$*"; do
    19     echo $i
    20 done
    21 
    22 echo "-- $@ 演示 ---"
    23 for i in "$@"; do
    24     echo $i
    25 done
    26 
    27 运行
    28 ./test1.sh 'one' 'two' 'three'
    29 -- $* 演示 ---
    30 one two three
    31 -- $@ 演示 ---
    32 one
    33 two
    34 three

    8、Shell 基本运算符

    • 算数运算符
    • 关系运算符
    • 布尔运算符
    • 字符串运算符
    • 文件测试运算符
    # 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
    val=`expr 1 + 1`
    echo $val
    注意:表达式和运算符之间要有空格,1+1正确
     

    8.1、算数运算符

     1 #!/bin/bash
     2 
     3 # 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。1 + 1之间必须有空格
     4 val=`expr 1 + 1`
     5 echo $val
     6 
     7 a=10
     8 b=20
     9 if [ a = b ]
    10 then
    11     echo "a等于b"
    12 else
    13     echo "a不等于b"
    14 fi
    15 
    16 a=10
    17 b=20
    18 
    19 val=`expr $a + $b`
    20 echo "a + b : $val"
    21 
    22 val=`expr $a - $b`
    23 echo "a - b : $val"
    24 
    25 val=`expr $a * $b`
    26 echo "a * b : $val"
    27 
    28 val=`expr $b / $a`
    29 echo "b / a : $val"
    30 
    31 val=`expr $b % $a`
    32 echo "b % a : $val"
    33 
    34 if [ $a == $b ]
    35 then
    36    echo "a 等于 b"
    37 fi
    38 if [ $a != $b ]
    39 then
    40    echo "a 不等于 b"
    41 fi

    8.2、关系运算符

     1 -eq =====equal等于
     2 -ne =====not equal 不等于
     3 -gt =====greater than a>b
     4 -lt =====less than a<b
     5 -ge =====greater than or equal a>=b
     6 -le =====less than or equal a>=b
     7 
     8 
     9 
    10 a=10
    11 b=20
    12 
    13 if [ $a -eq $b ]
    14 then
    15    echo "$a -eq $b : a 等于 b"
    16 else
    17    echo "$a -eq $b: a 不等于 b"
    18 fi
    19 if [ $a -ne $b ]
    20 then
    21    echo "$a -ne $b: a 不等于 b"
    22 else
    23    echo "$a -ne $b : a 等于 b"
    24 fi
    25 if [ $a -gt $b ]
    26 then
    27    echo "$a -gt $b: a 大于 b"
    28 else
    29    echo "$a -gt $b: a 不大于 b"
    30 fi
    31 if [ $a -lt $b ]
    32 then
    33    echo "$a -lt $b: a 小于 b"
    34 else
    35    echo "$a -lt $b: a 不小于 b"
    36 fi
    37 if [ $a -ge $b ]
    38 then
    39    echo "$a -ge $b: a 大于或等于 b"
    40 else
    41    echo "$a -ge $b: a 小于 b"
    42 fi
    43 if [ $a -le $b ]
    44 then
    45    echo "$a -le $b: a 小于或等于 b"
    46 else
    47    echo "$a -le $b: a 大于 b"
    48 fi

    8.3、布尔运算符

     1 a=10
     2 b=20 
     3 if [ $a != $b ];then
     4     echo "$a != $b : a不等于b"
     5 else
     6     echo "$a == $b : a等于b"
     7 fi
     8 if [ $a -lt 100 -a $b -gt 15 ]
     9 then
    10    echo "$a 小于 100 且 $b 大于 15 : 返回 true"
    11 else
    12    echo "$a 小于 100 且 $b 大于 15 : 返回 false"
    13 fi
    14 if [ $a -lt 100 -o $b -gt 100 ]
    15 then
    16    echo "$a 小于 100 或 $b 大于 100 : 返回 true"
    17 else
    18    echo "$a 小于 100 或 $b 大于 100 : 返回 false"
    19 fi
    20 if [ $a -lt 5 -o $b -gt 100 ]
    21 then
    22    echo "$a 小于 5 或 $b 大于 100 : 返回 true"
    23 else
    24    echo "$a 小于 5 或 $b 大于 100 : 返回 false"
    25 fi

    8.4、逻辑运算符

     1 a=10
     2 b=20
     3 
     4 if [[ $a -lt 100 && $b -gt 100 ]];then
     5    echo "返回 true"
     6 else
     7    echo "返回 false"
     8 fi
     9 
    10 if [[ $a -lt 100 || $b -gt 100 ]];then
    11    echo "返回 true"
    12 else
    13    echo "返回 false"
    14 fi

    8.5、字符串运算符

     1 a="abc"
     2 b="efg"
     3 
     4 if [ $a = $b ]
     5 then
     6    echo "$a = $b : a 等于 b"
     7 else
     8    echo "$a = $b: a 不等于 b"
     9 fi
    10 if [ $a != $b ]
    11 then
    12    echo "$a != $b : a 不等于 b"
    13 else
    14    echo "$a != $b: a 等于 b"
    15 fi
    16 if [ -z $a ]
    17 then
    18    echo "-z $a : 字符串长度为 0"
    19 else
    20    echo "-z $a : 字符串长度不为 0"
    21 fi
    22 if [ -n "$a" ]
    23 then
    24    echo "-n $a : 字符串长度不为 0"
    25 else
    26    echo "-n $a : 字符串长度为 0"
    27 fi
    28 if [ $a ]
    29 then
    30    echo "$a : 字符串不为空"
    31 else
    32    echo "$a : 字符串为空"
    33 fi

    8.6、文件测试运算符

    9、echo 命令

    9.1、输出普通字符串

    echo "It is a test"
    结果:It is a test

    9.2、显示转义字符

    echo ""It is a test""

    结果:"It is a test"

    9.3、显示变量

    #!/bin/sh
    read name 
    echo "$name It is a test"
    结果:
    OK                     #标准输入
    OK It is a test        #输出

    9.4、显示换行

    echo -e "OK! 
    " # -e 开启转义
    echo "It is a test"
    结果:
    OK!
    
    It is a test

    9.5、显示结果保存到文件

    echo "It is a test" > myfile
     

    9.6、显示命令字符对应的结果

    echo `date`
    注意: 这里使用的是反引号 `, 而不是单引号 '。
    结果将显示当前日期
    2020年 7月28日 星期二 15时05分27秒 CST

     

     

  • 相关阅读:
    CCF CSP 题解
    CCF CSP 2019032 二十四点
    CCF CSP 2018121 小明上学
    CCF CSP 2019092 小明种苹果(续)
    CCF CSP 2019091 小明种苹果
    CCF CSP 2019121 报数
    CCF CSP 2019031 小中大
    CCF CSP 2020061 线性分类器
    CCF CSP 2020062 稀疏向量
    利用国家气象局的webservice查询天气预报(转载)
  • 原文地址:https://www.cnblogs.com/zhangxue521/p/13391727.html
Copyright © 2011-2022 走看看