shell 常用功能函数


参考书籍 Linux shell 脚本攻略


目录

  • 使用别名
  • 获取终端信息
  • 获取、设置日期和延时
  • 调试脚本
  • 函数和参数
  • 字段分隔符和迭代器
  • 比较和测试

使用别名

  • 使用alias命令,作用只是暂时的,一旦关闭当前终端,所有设置过的别名就会失效。为了使别名一直保持作用,可以将其放入 ~/.bashrc文件中。
    $ alias new_command='command sequence'
  • 删除别名 unalias
  • 对别名进行转义,忽略当前定义过的所有别名
    $ \command

获取终端信息

tput以及stty终端工具

  • 获取终端的行数和列数
    tput cols
    tput lines
  • 打印当前终端名
    tput longname
  • 将光标移动到方位(x,y)处
    tput cup $x $y
  • 设置终端背景色,no可以在0-7之间取值
    tput setb no
  • 设置终端前景色
    tput setf no
  • 设置文本样式为粗体
    tput bold
  • 设置下划线的开闭
    tput smu1
    tput rmu1
  • 删除当前光标位置到行尾的所有内容
    tput ed

获取、设置日期和延时

  • 读取日期
    $ date

调试脚本

Bash本身包含了一些选项能够打印出脚本接受的参数和输入。

  • 使用-x选项,启动跟踪调试shell脚本,能够打印出所执行的每一行命令以及当前状态。也可以使用sh -x script.sh
    $ bash -x script.sh
    • set -x:在执行时显示参数和命令
    • set +x:禁止调试
    • set -v:当命令进行读取时显示输入
    • set +v:禁止打印输入
    • 文件头从 #!/bin/bash改成 #!/bin/bash -xv,不用任何其他选项就可以启动调试功能。

函数和参数

定义函数

function fname()
{
statements;
}
fname()
{
statements;
}

只需要使用函数名就可以调用某个函数
$ fname ;#执行函数
$ fname arg1 arg2; #传递参数

  • $1是第一个参数
  • $2是第二个参数
  • $n是第n个参数
  • $@被扩展为 "$1" "$2" "$3"
  • $* 被扩展为 "$1c$2c$3",其中c是IFS的第一个字符。
  • $@用的最多。由于$*将所有的参数当做单个字符串。

字段分隔符和迭代器

内部字段分隔符(IFS,Internal Field Separator)是shell脚本的一个重要概念。

data="name,sex,rollno,location"
oldIFS=$IFS
IFS=,
for item in $data;
do 
echo Item: $item
done

IFS=$oldIFS
  • for 循环
for var in list;
do 
commands;
done

生成序列
echo {1.. 50}
echo {a.. z}
for循环也可以采用c语言中for循环的格式

for((i=0;i<10;i++))
{
commands;
}
  • while循环
while condition
do
commands;
done
  • until循环:会一直循环直到给定的条件为真
x=0
until [ $x -eq 9 ];
do let x++; echo $x;
done

比较和测试

  • if条件
if condition;
then
commands;
fi
  • if else if和else
if condition;
then
commands;
elif condition;
then
  commands
else
  commands
fi

算术比较

条件通常放在封闭的中括号内,注意在[]与操作数之间有一个空格,否则会报错
[ $var -eq 0 ]
[ $var -ne 0 ]

  • -gt 大于
  • -lt 小于
  • -ge 大于等于
  • -le 小于等于
  • -a 逻辑与 `[ var1 -ne 0 -a $ var2 -gt 2 ]
  • -o 逻辑或

文件系统相关测试

  • [ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
  • [ -x $var ]: 如果给定的变量包含的文件可执行,则返回真。
  • [ -d $var ] : 如果给定的变量包含的是目录,则返回真。
  • [ -e $var ] : 如果给定的变量包含的文件存在,则返回真。
  • [ -c $var ] : 如果给定的变量包含的是一个字符设备文件的路径,则返回真。
  • [ -b $var ] : 如果给定的变量包含的是一个快设备文件的路径,则返回真。
  • [ -w $var ] : 如果给定的变量包含的文件可写,则返回真。
  • [ -r $var ]:如果给定的变量包含的文件可读,则返回真。
  • [ -L $var ] : 如果给定的变量包含的是一个符号链接,则返回真。

字符串比较

使用字符串比较时,最好用双中括号因为有时候采用单中括号会产生错误。

[[ $str1 = $str2 ]]
[[ $str1 == $str2 ]]
[[ $str1 != $str2 ]]
[[ $str1 > $str2 ]]
[[ $str1 < $str2 ]]
[[ -z $str1 ]] # 空字符串则返回真
[[ -n $str1 ]] #非空字符串,则返回真。

你可能感兴趣的:(shell 常用功能函数)