文档章节

Shell脚本基础笔记(1)

沙米笔记
 沙米笔记
发布于 2017/09/19 19:41
字数 892
阅读 23
收藏 0

1、Bash中命令分割

每个命令或是命令序列都是通过分号(;)或换行符来分隔

$ cmd1 ;cmd2 

等价于

$cmd1

$cmd2

2、终端打印echo、printf

双引号 --- 变量名替换;特殊字符序转义字符(\)  -e才生效

单引号 --- 变量名不会被扩展,依照原样输出;特殊字符序转义字符(\)  -e才生效

m11@xubuntu:~$ echo -e "aaa\nbbb"
aaa
bbb
m11@xubuntu:~$ echo -e 'aaa\nbbb'
aaa
bbb

printf --- 按格式打印字符串   

root@dxx-VirtualBox:~# printf "%-5s %-10s  %-4.2f\n" $var bbb 1.123456 
aaaa  bbb         1.12

3、变量

3.1、变量赋值和判相等

var=value

var = value

3.2、变量继承

export 变量名        :当前shell脚本执行的任何应用程序都会继承这个变量

3.3、获取变量长度      ${#变量名}

3.4、检查是否是root用户    $UID = 0  超级用户

3.5、修改bash的提示字符    $SP1

3.6、判断变量是否空  

${parameter:+expression}   : 如果parameter有值且不为空,则赋expression的值

root@xubuntu:/home/m11# aaa="bbb"&&echo ${aaa:+"----"}
----
root@xubuntu:/home/m11# aaa=""&&echo ${aaa:+"----"}

${parameter:=expression}   : 如果parameter为空,则赋expression的值;不为空,则使用原值

root@xubuntu:/home/m11# aaa=""&&echo ${aaa:="----"}
----
root@xubuntu:/home/m11# aaa="aaa"&&echo ${aaa:="----"}
aaa

4、计算

4.1 let、$(())、$[] 

计算中变量'$'字符可有可无。

包裹计算表达式的$(())、和$[]必须有'$'字符。

root@xubuntu:/home/m11# aa=111;bb=222 && let rs=aa*bb && echo $rs
24642
root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$aa*bb && echo $rs
24642

root@xubuntu:/home/m11# aa=111;bb=222 && let rs=[aa*bb] && echo $rs
bash: let: rs=[aa*bb]: syntax error: operand expected (error token is "[aa*bb]")
root@xubuntu:/home/m1# aa=111;bb=222 && let rs=$[aa*bb] && echo $rs
24642
root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$[$aa*bb] && echo $rs
24642

root@xubuntu:/home/m11# aa=111;bb=222 && let rs=(($aa*bb)) && echo $rs
bash: syntax error near unexpected token `('
root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$(($aa*bb)) && echo $rs
24642
root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$((aa*bb)) && echo $rs
24642

4.2 bc 高级数学运算

echo "4 * 5" |bc
echo "scale=2;3/8 " |bc        设置小数精度为2
aaa=10;echo "obase=2;$aaa " |bc 进制转换为二进制
echo "sqrt(100)" |bc            平方根
echo "10^2" |bc                 平方

5、重定向

0     stdin

1     stdout

2     stderr

>      只将标准输出进行重定向,等价于 1>

2>    只将错误输出进行重定向

2> xxx 1> xxx1  将错误输出到xxx中,将标准输出到xxx1中

1> test 2>&1    将将标准输出到test中,并且错误输出传递给1输出通道  等价于&> test

tee       将数据重定向到文件中,同时提供数据副本作为后续命令的stdin

cat<<END     将END间的数据都当做数据

#!/bin/bash
cat<<END
<xml>adsfasdf
<h1>asdfasdf
</h1>
</xml>
END

6、数组

1)普通数组

定义、使用、赋值、打印

arry=(1  2 3 4 )
root@xubuntu:/home/m11/test# echo ${arry[2]}
3
root@xubuntu:/home/m11/test# echo ${arry[*]}
1 2 3 4
root@xubuntu:/home/m11/test# echo ${arry[@]}
1 2 3 4
root@xubuntu:/home/m11/test# arry[1]=12
root@xubuntu:/home/m11/test# echo ${arry[@]}
1 12 3 4
root@xubuntu:/home/m11/test# echo ${#arry[*]}
4

2)关联数组(一定要先声明)

root@xubuntu:/home/m11/test# declare -A ass_arry
root@xubuntu:/home/m11/test# ass_arry=([name]="dxx" [age]="12")
root@xubuntu:/home/m11/test# echo ${ass_arry[name]}
dxx
root@xubuntu:/home/m11/test# echo ${!ass_arry[*]}
name age
root@xubuntu:/home/m11/test# echo ${!ass_arry[@]}
name age

7、别名

root@xubuntu:/home/m11/test# alias lh='ls -lh'        定义别名
root@xubuntu:/home/m11/test# unalias lh               删除别名

忽略别名,使用转义字符 '\' ,格式 \ command

8、命令

pgrep  进程名字          :获取进程的PID

cat /proc/1977/environ        :查看1977进程的环境变量

root@dxx-VirtualBox:~# pgrep nm-applet
1977
root@dxx-VirtualBox:~# cat /proc/1977/environ 
GNOME_KEYRING_PID=USER=dxxLANGUAGE=en_USLC_TIME=zh_CN.UTF-8XDG_SEAT=seat0JAVA_TOOL_OPTIONS=-javaagent:/usr/share/java/jayatanaag.jar XDG_SESSION_TYPE=x11COMPIZ_CONFIG_PROFIL

 

 

 

 

 

 

© 著作权归作者所有

沙米笔记
粉丝 29
博文 43
码字总数 45024
作品 0
深圳
程序员
私信 提问
Linux Shell学习之基础篇(不适合学习,仅为本人笔记)

在学习Linux和OpenStack过程中,感觉不管是大规模部署部署还是运维,Shell脚本都已经是标配,所以学好脚本很有必要。 以下仅为Linux Shell的一些基础笔记,这里作为笔记记下。 ============...

yishuizhao
2018/07/02
0
0
shell基础十二篇

[size=4]编者按:由 [color=orange]wingger[/color] 整理的 [color=green]shell基础十二篇[/color] 涉及shell 编程及使用的各个方面,又附有大量的例子,极适合初学者系统学习。如果配合網...

红薯
2009/05/06
704
0
程序猿成长计划--growing-up

程序猿成长计划 程序员成长计划包含了作为一名程序猿成长过程中的所学,我把这些以教程的形式开源出来,供大家一起学习、补充,共同成长。 三十分钟学会AWK Docker学习笔记-基础命令 一小时学...

mylxsw
2016/11/30
1K
0
Linux自学笔记——bash的基础特性

Bash的基础特性(1) 1.命令历史history 环境变量; HISTSIZE:命令历史记录的条数; HISTFILE:~/.bash_history HISTFILESIZE;命令历史文件记录历史的条数; 调用上一条命令的最后一个参数...

claude_liu
2017/09/19
0
0
Linux shell脚本-基础学习笔记

Linux脚本能力不是太强,最近再补习下,毕竟linux shell在日常工作中还是很普遍的, 用起来更方便、省时省力。 以下是学习笔记,偏理论,后面有几个例子,供参考。 shell脚本组成元素 系统命...

yishuizhao
2015/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于docker0: iptables: No chain/target/match by that name的问题解决

由于Docker 0默认网桥的iptables策略冲突问题,将导致一些web server启动时出现如下错误: docker: Error response from daemon: driver failed programming external connectivity on endpo......

王焱君
今天
87
0
js 下载 canvas 兼容移动端

很蛋疼的问题PC上好好的, 移动端下载不了 , 貌似前端 js 生成的时 base64 格式的 图片数据,移动端无法直接下载, 但是chrome 移动端和pc端都没问题, 国产的几个浏览器全部挂了 之前的下载方式...

阿豪boy
昨天
76
0
微信小程序获取用户OpenId

1.在小程序中获得UserCode: wx.login({success: function (res) {thisApp.setData({userCode: res.code})}}) 2.在小程序中获得UserInfo: wx.getUserInfo({success...

kaition
昨天
54
0
代码生成器技术乱弹二十三,未来之野望,未实现的功能SQLTypes

在原先的Java类型系统的基础上新增SQL类型系统,有校验确保SQL类型系统兼容于Java类型系统。在生成数据库脚本时候使用SQL类型系统。

火箭船
昨天
48
0
Mybatis在插入自增字段时,会对当前对象未赋值的自增字段进行赋值

Mybatis在插入自增字段时,会对当前对象未赋值的自增字段进行赋值,如下即自动完成对id的赋值 OrderItem orderItem = new OrderItem(); System.out.println("==...

Gotcha_
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部