bash学习笔记

快捷键操作

  • Ctrl + a:移到行首
  • Ctrl + b:向行首移动一个字符,与左箭头作用相同
  • Ctrl + e:移到行尾
  • Ctrl + f:向行尾移动一个字符,与右箭头作用相同
  • Alt + f:移动到当前单词的词尾( ESC + f )
  • Alt + b:移动到当前单词的词首 ( ESC + b )

变量

  • 读取变量的时候,变量名也可以使用花括号{}包围,比如$a也可以写成${a}
    这种写法可以用于变量名与其他字符连用的情况
$ a=foo
$ echo $a_file


$ echo ${a}_file
foo_file
  • unset命令用来删除一个变量
  • $$为当前 Shell 的进程 ID,可以用来命名临时文件 LOGFILE=/tmp/output_log.$$
  • $_为上一个命令的最后一个参数
${varname:-word} 如果变量varname存在且不为空,则返回它的值,否则返回word
${varname:=word} 如果变量varname存在且不为空,则返回它的值,否则将它设为word
${varname:+word} 如果变量名存在且不为空,则返回word,否则返回空值
${varname:?message} 如果变量varname存在且不为空,则返回它的值,否则打印出varname: message
${#varname} 获取字符串长度
${varname:offset:length} 提取子字符串
${varname^^} 转为大写
${varname,,} 转为小写

算术

  • ((...))语法可以进行整数的算术运算

脚本

#!/usr/bin/env bash 
指定解释器

# 给所有用户执行权限
$ chmod +x script.sh
# 给所有用户读权限和执行权限
$ chmod +rx script.sh
# 或者
$ chmod 755 script.sh
  • getopts命令用在脚本内部,可以解析复杂的脚本命令行参数,通常与while循环一起使用,取出脚本所有的带有前置连词线(-)的参数
while getopts 'lha:' OPTION; do
  case "$OPTION" in
    l)
      echo "linuxconfig"
      ;;


    h)
      echo "h stands for h"
      ;;


    a)
      avalue="$OPTARG"
      echo "The value provided is $OPTARG"
      ;;
    ?)
      echo "script usage: $(basename $0) [-l] [-h] [-a somevalue]" >&2
      exit 1
      ;;
  esac
done
shift "$(($OPTIND - 1))"
  • 在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2
1>&2 正确返回值传递给2输出通道 &2表示2输出通道
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道
> /dev/null 所有传给它的东西它都丢弃掉
#!/bin/bash
filename='/etc/hosts'


while read myline
do
  echo "$myline"
done < $filename

# 上面的例子通过read命令,读取一个文件的内容。
# done命令后面的定向符<,将文件内容导向read命令,每次读取一行,存入变量myline,直到文件读取完毕。
  • read命令读取的值,默认是以空格分隔。可以通过自定义环境变量IFS(内部字段分隔符,Internal Field Separator 的缩写),修改分隔标志。

if结构

if commands; then
  commands
[elif commands; then
  commands...]
[else
  commands]
fi
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。