Shell 脚本攻略-小试牛刀

在终端中打印

Script

#!/bin/bash
echo hello world
echo 'hello world'
echo "hello world"

echo -e "1\t2\t3"
echo "1\t2\t3"

Note

  • 字符串可以以三种形式输出,但是单引号的字符串中不能对变量求值,例如 var=1; echo 'hello $var' 会输出 hello $var
  • echo 的输出会默认会增加换行
  • -e 表示字符串中有转义字符

变量和环境变量

Script

#!/bin/bash
var=123456

echo $var
echo ${var}

echo "var length is: ${#var}"

var_quote="123456"
[ $var -eq $var_quote ] && echo 'var equals to var_quote'
[ $var == $var_quote ] && echo 'var equals to var_quote'
[ $var = $var_quote ] && echo 'var equals to var_quote'

Output

123456
123456
var length is: 6
var equals to var_quote
var equals to var_quote
var equals to var_quote

Note

  • 不论是否有引号,变量值的类型都是 String
  • var = valuevar=value 两者含义不同,前者表示等于条件判断,后者表示赋值。

数学运算

Script

#!/bin/bash
i=1
j=2
let k=i+j
echo k=i+j is: $k

let k++
echo k++ is: $k

let k--
echo k-- is: $k

k=$((i + j))
echo "(()) operator: $k"

k=$[i + j]
echo [] operator: $k

Note

  • 可以通过 let, $(()), $[] 对变量进行整形计算
  • bc 可以进行浮点数计算

重定向文件描述符

Script

#!/bin/bash
file_name=/tmp/temp.txt
touch $file_name

echo "hello" > $file_name
ls + &> $file_name
echo "append" >> $file_name

ls + 2>> $file_name
ls . 1>> $file_name

Note

  • > 表示截断,>> 表示在文件末尾追加
  • cmd < file 表示将 file 的内容重定向为 stdin
  • 文件描述符 0,1,2 分别表示标准输入、标准输出、标准错误

数组和关联数组

Script

#!/bin/bash
array1=(1 2 3)
echo array1 is: ${array1[*]}

array2[0]=1
array2[1]=2
array2[2]=3
echo array2 is: ${array2[*]}
echo array2 length is: ${#array2[*]}

Note

  • 关联数组通过 declare -A map 声明,在低版本的 bash 中不支持。

函数和参数

Script

#!/bin/bash
fn()
{
    echo '$0 is: '$0
    echo '$1 is: '$1
    echo '$2 is: '$2
    echo '$@ is: '$@
    echo '$* is: '$*
    return 10
}

fn 1 2
echo return value is: $?

Note

  • 注意函数参数已经返回值的语法

将命令的输出存到变量中

Script

#!/bin/bash
file_name=/tmp/tmp.txt
echo -e "1\n2\n3" > $file_name

cmd_output=$(cat $file_name)
echo $cmd_output

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

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,036评论 1 19
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 6,324评论 1 4
  • 在shell中常用的特殊符号罗列如下: ; ;; . , / \ 'string'| ! $ ${} ...
    lupinwu阅读 1,970评论 0 0
  • 基础 头文件 #!/bin/bash 或者#!/bin/sh #!约定的标记,如IOS的Import 执行文件时需...
    ZMJun阅读 1,223评论 1 2
  • 壹版 我是一个不折不扣的败家子,当别人家的孩子都去打工挣钱的时候,我却开始了我的败家之旅。 上初中,我是有绝对的自...
    淇水滺々阅读 333评论 0 1