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 ]] #非空字符串,则返回真。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容