1.小试牛刀

1.在终端中显示输出

  $ 表示普通用户
  # 表示管理员用户root

shell脚本通常以#!/bin/bash起始;bash将以#符号开头的行视为注释

脚本执行的两种方式

(1)将脚本名字作为命令行参数

  bash filename.sh

(2)授权脚本执行权限,将其变为可执行文件
 使用chmod命令赋予脚本可执行权限

  chmod a+x filename.sh
  ./filename.sh

echo

echo是用于终端打印的最基本命令。默认情况下,echo在每次调用后会添加一个换行符:

  echo "Hello World"
  echo Hello World
  echo 'Hello World'

双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做任何解释。
如果需要打印像这样的特殊字符,那就不要放入双引号中,而是使用单引号,或是在特殊字符之前加上一个反斜线(\这里是转义符的意思)

  echo 'Hello World $pwd'
  echo "Hello World \$pwd"

在echo中转义换行符

默认情况下,echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时,需要使用echo -e"包含转义序列的字符串"

  echo -e "1\t2\t3"

2.使用变量和环境变量

可以使用envprintenv命令查看当前shell中所定义的全部环境变量
PID是相关进程的进程ID,使用pgrep命令就能获取进程ID

  pgrep gedit      #假设gedit是一个应用程序正在运行

变量赋值

  varname=vaule

varname是变量名,value是赋给变量的值。如果value不包含任何空格,那么就不需要将其放入引号中,否则必须使用单引号或双引号
注意:varname = value不同于varname=value。等号两边没有空格的是赋值操作符,加上空格的等号表示的是等量关系测试。

  var="value"
  echo $var      #变量前加上$就可以访问变量的内容

export

export 可新增,修改或删除环境变量,供后续执行的程序使用
PATH变量列出了一些列可供shell搜索特定应用程序目录
如果需要在PATH中添加一条新路径,可以使用如下命令:

  export PATH="$PATH:/home/user/bin"

补充知识点

获取字符串长度

在变量强添加${#variable}

  var=1234567
  echo ${#var}

修改bash的提示字符串

查看设置变量PS1的那一行

  cat ~/.bashrc | grep PS1
  PS1="XXX"

3.使用shell进行数学运算

bash shell使用let、(())、和[]执行基本的算术操作。攻击expr和bc可以用来执行高级操作

let

let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要在添加$。

  #!/bin/bash
  n1=4
  n2=5
  let result=n1+n2
  echo $result

自加操作

  let n1++

自减操作

  let n1--

[]和()

操作符[]的使用方法和let命令一样:

  result=$[ n1 + n2 ]

在[]中也可以使用$前缀

  result=$[ $n1 + 5 ]

也可以使用(())。出现在(())中的变量名之前需要加上$:

  result=$(( n1 + 50 ))

expr

expr同样也可以用于基本算术操作

  result=`expr 3 + 4`
  result=$(expr $n1 + 5)

注意:以上方法不支持浮点数,只能用于整数运算

bc

bc支持浮点数计算

  echo "4 * 0.56" | bc

设置小数精度:scale

  echo "scale=2;22/7" | bc      #scale=2将小数位个数设为2

进制转换: obase

  #!/bin/bash
  no=100
  echo "obase=2;$no" | bc          
  echo "obase=10;$no" | bc

计算平方以及平方根

  echo "sqrt(100)" | bc
  echo "10^10" | bc

4.文件描述符与重定向

(1)使用大于号将文本保存到文件中

  echo "This is a sample text 1" > temp.txt

(2)使用双大于号将文本追加到文件中

  echo "This is sample text 2" >> temp.txt

注意:>会清空该文件中先前的内容

5.数组与关联数组

(1)可以在单行中使用数组值列表来定义一个数组

  array_var=(test1 test2 test3 test4)

还可以通过索引值来定义数组

  array_var[0]="teset1"
  array_var[1]="teset2"
  array_var[2]="teset3"
  array_var[3]="teset4"

(2)打印特定索引的数组元素内容

  echo ${array_var[0]}

(3)以列表形式打印数组中的所有值

  echo ${array_var[*]}

6.别名

alias命令创建别名
(1).创建别名

  alias new_command='command sequence'

注意alisa命令的效果只是暂时的。一旦关闭当前终端,所有设置过的别名就失效了。
如果需要删除别名,可以使用alias example=,

7.获取并设置日期及延时

(1).读取日期

  date

(2).打印纪元

  date +%s

可以使用纪元的插值来计算一组命令所花的时间

延时

sleep命令可以延迟脚本执行一段时间(以秒为单位)

  sleep 1      #  延时1秒

8.调试脚本

(1).使用选项-x,启用shell脚本的跟踪调试功能。运行带有-x选项的脚本可以打印出所执行的每一行命令以及当前状态。

  bash -x xxx.sh

9.函数和参数

函数和参数

(1).函数的定义

  function fname()
  {
        statmemts;
  }
  或者
  fname()
  {
        statmemts;
  }

(2).只需要使用函数名就可以调用函数,函数参数可以按位置访问,$1是第一个参数,$2是第二个参数...

  fname()
  {
        echo $1, $2;
        echo "$@";
        echo "$*";
        return 0;
  }

知识点补充:

  $0      是脚本名称
  $1      是第一个参数
  $2      是第二个参数
  $n      是第n个参数
  $@      所有参数
  $*      所有参数
  $?      读取上个命令是否执行成功,如果成功返回0。

注意常用$@

导出函数

函数也能像环境变量一样用export导出,如此一来,函数的作用域也可以扩展到子进程中

  export -f fname

10.read

read提供了一种在不需要按下回车键就能读入字符的功能
(1).从输入中读取n个字符并保存

  read -n 2 var            # 输入2个字符不需要按回车就能保存到var中

(2).使用无回显的方式读取密码

  read -s var            # 注意需要回车

(3).使用read显示提示信息

  read -p "Enter Input:" var

(4).用特定的定界符作为输入行的结束

  read -d "!" var
  hello!            # var被设置为hello

11.比较与测试

(1).if

  if condition;then
        commands
  fi

(2).else if

  if [ condition ];then
        commands;
  else if [ condtion ];then
        commands;
  fi

(3).知识点补充

  -eq      等于
  -nq      不等于
  -gt      大于
  -lt      小于
  -ge      大于或等于
  -le      小于或等于
  -a       and
  -o       or
  -f       是否为文件
  -x       是否为可执行文件
  -d       是否为目录
  -e       文件是否存在
  -c       是否为字符设备文件
  -b       是否为块设备文件
  -w       文件是否可写
  -r       文件是否可读
  -z       为空
  -n       不为空

(4).字符串比较
字符串比较时,最好使用双括号。
测试两个字符串是否相同

  [[ $str1 == $str2 ]]
  [[ $str1 != $str2 ]]

(5).测试空串

  [[ -z $str ]]            # 如果str为空则返回真
  [[ -n $str ]]            # 如果str不为空则返回真
posted @ 2020-06-14 12:33  人民广场的二道贩子  阅读(202)  评论(0)    收藏  举报