3 linux命令行与shell脚本编程大全_part2

6 开始shell编程

反引号:``将命令输出结果赋值给变量;
重定向:>写入文件,>>追加到文件,wc<test文件内容输入到命令;
管道:相当有用!同时运行,将命令的输出向后依次传递;
数学运算:记住bash仅能处理整数!

$[operation]
expr operation
bc # 设置scale以计算浮点数

var=`bc << EOF
scale=4
a1=10.46*43.67
b1=33.2*71
a1+b1
EOF
`

EOF用来标识内联重定向数据的开始和结尾;
退出脚本:exit [0~255]

7 逻辑流控制

双圆括号:((expression))高级数学表达式(C语言风格)
双方括号:[[expression]]匹配字符串
内部字段分隔符IFS:空格、制表符、换行符(包含空格的字符串,使用双引号)
while:允许多个测试命令,由最后的那个决定结束循环(所有命令都被执行,且每个命令都是单独一行)
break/continue n:跳出循环/停止循环内的命令,但继续外部循环(默认n=1)

# 普通shell命令:执行cmd,若exit 0,则执行cmds_1
if cmd
then
    cmds_1
elif cmd
then
    cmds_2
else
    cmds_3
fi

# test命令:数值(-gt)。字符串(>或<,记得加双引号)、文件比较(包括目录、文件)
if [ $var1 -gt $var2 ]
if [ "$str1" \> "$str2" ] [ -n "$str1" ] [ -z "$str1" ]
if [ -d/-e "$HOME" ] [ -f/-s "$file" ]

# case命令
case variable in
pattern1 | pattern2)
    cmds_1;;
pattern3)
    cmds_2;;
*)
    default_cmds;;
esac

# var保持最后一次迭代的值;按行遍历文件;结果重定向;结果管接给另一个命令
IFS=$'\n' IFS=: IFS=$'\n:;'"
for var in `cat "$file"`
do
    echo $var
done > output.txt | sort

8 处理用户输入

# 读取程序名
`basename $0`
# 参数变量
$#; ${!#}; $*/$@
# 移除参数:用于遍历参数
while [ -n $1 ]; do ... shift n; done
# getopt命令:-a -b 'test1' -c -d --'test2''test3'
argv[]="-a -b test1 -cde test2 test3"
getopt -q ab:cd $@

9 shell基础

  • 一切皆文件:所有资源统统抽象为文件形式
  • 单一目的小程序:组合小程序完成复杂任务
  • 尽量避免跟用户交互:易于编程实现自动化任务
  • 使用文本文件保存配置信息

shell优势在于处理偏操作系统底层的业务,符合linux简单、易用、高效的三大原则;
python优势在于复杂运维软件、web页面管理工具、web业务的开发。

变量、注释
$+变量名,推荐引用时加上{}
需要原样输出,加上单引号
其他没有特别要求的字符串等最好都加上双引号
大段注释或临时代码加上{},定义成函数,不调用就不会执行。

myUrl="http://see.xidian.edu.cn/cpp/shell/"
readonly myUrl # 只读变量,更改会报错
myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
unset myUrl # 删除变量,但不能删除只读变量
unset .f function # 删除函数

文件包含
source又称为点操作符,推荐使用.
被包含脚本不需要有执行权限。

# source ./function.sh或
. ./function.sh
# 获取绝对路径的方法
real_path=`readlink -f $filename`
. $real_path

10 shell高级

函数(库)

function func1 {
    cmds
}
func2() {
    cmds
}
# 局部变量
local temp

函数被重定义时,新定义覆盖原定义,不会产生任何错误消息。
$?函数的退出状态码,仅代表最后一条命令是否成功运行;return整数值,赋给$?为退出码;echo输出,赋给变量;循环+echo输出,赋给数组变量。
启动新shell自动加载函数:.bashrc文件
图形化菜单

function menu {
    clear
    echo -e "\t\t\tSys Admin Menu\n"
    echo -e "\t1. Disply disk space"
    echo -e "\t2. Display logged on users"
    echo -e "\t3. Display memory usage"
    echo -e "\t0. Exit program\n\n"
    echo -en "\t\tEnter option: "
    read -n 1 option
}
menu
case $option in
0)
    break ;;
1)
    diskspace ;;
2)
    whoson ;;
3)
    memusage ;;
*)
    clear
    echo "Sorry, wrong selection.";;
esac

11 正则表达式、sed进阶

[] 字符组:包含任何字符
[^] 排除字符组:之外的任何字符
[[::]] 特殊字符组:alnum=alpha+digit;blank/print/punct/space
*/+/? 0或多次/1或多次/0或1次
{m,n} 指定出现次数:在m到n的区间
|/() OR多个模式/聚合表达式

d 删除pattern space,进入下一个循环
h/H pattern space 复制/附加 hold space
g/G hold space 复制/附加 pattern space
x pattern space 交换 hold space
b/t 跳转(很难掌握)
& \1 \2 模式替代
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,113评论 2 34
  • 小时候,喜欢一家人赖床不起来的早上的 宁静。如今更喜欢的是家人在赖床,我早 早起来的宁静。 文字与米粥是美...
    高笑生阅读 119评论 0 3
  • 【青莲堂日话】160102 文/effelee 每日一话,是为日话 只有把每日零落的思绪写下来时才发现这短短24个...
    effelee阅读 111评论 0 0
  • 今日终把这本小说读完了,这两日读了二百余页,一下子就读完了。我喜欢这部小说,他带我入了另外的一个世界,那是...
    方五阅读 218评论 0 0
  • 好苦恼,自从来到写作训练营,自己觉得脑子里是空的。每天都在想着今天写点什么,别人都已经开始打卡了,自己还不知道该写...
    青青子衿1989阅读 317评论 4 1