shell学习笔记---抄录

SHELL笔记

1、查看一个文件或目录的大小 ls   du

2、查看状态     stat 文件名

3、系统本身所有,通常为大写字母

4、系统变量通过 set 或 declare 指令进行查看

5、UDV 变量(user defined variable)

用户创建和维护,建议大写(为什么?)

原因:避免冲突与混淆,因为 Linux 系统中命令全部采用小写的方式

6、Shell 中所有变量定义都为字符串。

变量区分大小写,如:foo 和 Foo 是两个不同的变量

变量必须以字母或下划线开头,不得有”,”,”:”,”\”等特殊字符。

7、1)变量的定义

变量名=值 (变量名与值之间”=”号没有空格)   举例:LANG=cn 与 LAGN= en LANG =en

2) 声明带空格变量

需要加上引号——” ”     举例:MY=23 67

3) 声明一个只读变量    readonly MY_UDV=guozi

4) 修改变量

修改环境变量 例:PATH=$PATH:/opt/bin      修改用户自定义变量 例:SRC=”guozi”

8、变量的使用

变量前加“$”符号

echo $HOME 或 echo ${HOME}   echo $USER 或 echo ${USER}

思考:为什么要使用变量?为什么要添加界定符:{} ?

因为这样,变量名之后可继续接内容

9、重定向输出

直接输入:ls –l > lsoutput.txt    追加:ls –l /home >> lsoutput.txt

输出到空设备:/dev/null

“>” 代表重定向到哪里

“1” 表示 stdout 标准输出,系统默认值是 1

">/dev/null"等同于"1>/dev/null"

“2” 表示 stderr 标准错误

“&” 表示等同于的意思,2>&1,表示 2 的输出重定向等同于 1

举例:killall ser > /dev/null 2>&1

10、重定向输入

shell 终端中交互式输入内容

格式:cat >> 2.txt <<EOF [内容] EOF

从一个文件中读取内容赋值给一个变量

格式:read variable < filename

11、显示文本或变量值

格式:echo [选项][字符,变量……]

选项:

-n 不换行输出 echo 默认是输出一次换一行

-e 增强。启用转义字符解析

\a 响铃 \b 退格 \c 去除尾部的新行

\n 新的一行 \r 回车 \t 水平制表符

\\ 斜杠 \0NNN 八进制 \0xHH 十六进制输出

举例: echo -e “ Welcome to GuoZi’ s \n\t\\ shell programming”

12、输出有颜色的字符

前景色:十位数的 3 表示 范围:30-37(3x 表示)

背景色:十位数的 4 表示 范围:40-47(4x 表示)

个位数表示色彩

30(黑色) 31(红色) 32(绿色) 33(黄色)

34(蓝色) 35(洋红) 36(青色) 37(白色)

举例:echo -e "Network restarting... [\033[32;40m OK \033[0m]"

13、计算方法

有三种格式可以进行数学计算。

1.1.第一种——expr

格式:expr 操作数 1 操作符 操作数 2

举例:

1 expr 1 + 2 TMP=$(expr 1 + 2)

2 expr 1 + 4 / 3 TMP=$(expr 1 + 4 / 3 )

3 expr 1 + 2 * 3(?)

特点:格式要求相对严格

1.2.第二种——( )

格式:$((操作数 1 操作符 操作数 2 ))

举例:TMP=$((1 + 3))

特点:格式要求相对较松

1.3.第三种——let

格式:let “[变量] [操作符] 操作数 1 操作符 操作数 2”

举例:

1 let “1+2” 2 let “TMP2=1+2”

特点:格式要求松,计算灵活

14、1、什么叫引用

对 shell 脚本、程序、终端命令、变量、字符串等结果的反馈。

2. 引用的类型

" " 双引号 ` 反引号 ‘ ‘ 单引号 \ 反斜线

3. 引用的必要性

目的:防止不必要的误会。

举例:

1 echo hello world * 与 echo “hello world *”

2 echo “hello ‘ world “ welcome”

3 echo “hello \ world”

3.1. 双引号

使用双引号可引用除字符 $、`、\ 外的任意字符或字符串。

举例:

1 echo “Welcome to #$%^ to Shell programming”

2 echo “Welcome to $ABC programming”

3.2. 单引号

单引号与双引号类似,不同的是 shell 会忽略任何引用值。

举例:

echo “The ‘$BOY’ is 24 years old”

3.3. 反引号

反引号用于将系统命令的输出到变量,举例:

1 echo `hello` (错×)

2 echo `date` (对√)

3.4. 反斜线

如果下一个字符有特殊含义,反斜线防止 shell 误解其含义

下述字符包含有特殊意义: & * + ^ $ ` " | ?。

1. 匹配文件的符号

定义:匹配字符串类型的符号称之为元字符。

1.1. * 匹配文件

* 匹配文件名中的任何字符串,包括空字符串。

举例:ls /etc/*.conf  ls /etc/cg*.co*f

1.2. ? 匹配文件

? 匹配文件名中的任何单个字符。

举例:  ls /etc/pptp?.conf    ls /etc/??st.conf

1.3.[ ] 匹配文件

? [...] 匹配 [ ] 中所包含的任何一个字符。

杂乱匹配:ls /etc/[wersdfp]syslog.conf

范围匹配:ls [0-9][a-zA-Z].txt

? [!...] 匹配 [ ] 中非感叹号!之后的任意一个字符。

与上一条规则刚好相反。

举例:ls [!0-9]*.txt    匹配非数字开头的后缀名为 txt 的所有文件。

2. 1. 命令的执行结果

查看命令执行返回值:echo $?   成功:返回 0    失败:返回非 0

2. 命令执行控制

2.1.使用&&符号

格式:命令 1 && 命令 2 && …

说明:如果命令 1 执行成功,那么执行命令 2……

举例:cp /home/file.txt /opt && echo “Copy file success”

编译源码时:./configure && make && make install

用处:用于脚本的执行的调试。

2.2.使用 || 符号

格式:命令 1 || 命令 2 || …

说明:如果||左边的命令执行失败了,那么接着执行右边的命令

举例:cp hello.txt copy.txt || echo “Copy file failed”

用处:用于脚本的执行的调试。

3. 命令的组合使用

格式 1: “;”一次下达两个以上的命令

格式 2: (命令 1;命令 2;. . .) 在当前 shell 中执行

格式 3:{命令 1;命令 2; . . . } 在子 shell 中执行

举例:

1) ls /usr ; cd ; echo “OK”

2) (ls ; cat hello.txt; cd) || echo “success”

3) {ls ; cat hello.txt; cd}|| echo “success”

3. 正则有哪些元字符

[ ] \ ^ $ . | ? * + ( )

3. 基本元字符集及其含义

^ 匹配行首

$ 只匹配行尾

* 一个单字符后紧跟*,匹配 0 个或多个此单字符

[ ] 只匹配[ ] 内字符。可以是一个单字符,也可以是字

符序列。可以使用‘-’表示[ ]内字符序列范围,如

用[ 1 - 5 ]代替[ 1 2 3 4 5 ] \

\ 用来屏蔽一个元字符的特殊含义。因为有时在 shell 中一些元字符有特殊含义。\可以使其失去应有意义。\t \r \n

? 告诉引擎匹配前导字符 0 次或一次

+ 告诉引擎匹配前导字符 1 次或多次

.只匹配任意单字符

p a t t e r n \ { n \ } 只用来匹配前面 p a t t e r n 出现次数。n 为次数

p a t t e r n \ { n,\ } 只含义同上,但次数最少为 n

p a t t e r n \ { n,m \ } 只含义同上,但 p a t t e r n 出现次数在 n 与 m 之间

4. 匹配开头和结尾字符    格式:grep { ^string | string $ } filename

5. 示例:  grep ^[a-z]tr filename    grep tr$  filename

6. 匹配整个单词     格式: grep ‘\bword\b’ filename

7. .  ?  +和 *的用处    格式:grep { … | ? | .*}  filename

8. . 匹配单个字符能匹配空格  * 匹配任意字符或字符串的重复多次

9. .+ 字符必须出现1次    .? 字符出现0次或1次

10. 注意:grep不支持+  ?元字符  必须要加上-E选项

11. Perl的正则表达-P

12. .* 的贪婪匹配   .*? 惰性匹配

13. grep的标签

14. 格式:grep ‘\(str\)\(\)\(\)[other]\1’ filename

15. 示例:grep -n ‘\(tom\)\(guozi\)..\1‘ a3.txt –color

16. grep中的pattern搜索

17. 格式1:grep ‘[str]\{1\}’ filename

18. 格式2:grep ‘[str]\{1,\}’  filename  格式3:grep ‘[str]\{1,3}’ filename

19. sed 命令基本语法

1.1 sed 命令格式   sed [options] {sed-commands} {input-file}

1.2 sed 的 p 命令与-n 选项(print, --quiet --silent)

只打印第一行:   sed -n ‘1 p‘ example.txt

打印第一行至第三行    sed -n ‘1,3 p‘ example.txt

打印 Jason 所在行    sed -n ‘/Jason/ p‘ example.txt

打印 Jason 至 Jane 所在的行    sed -n ‘/Jason/,/Jane/ p‘ example.txt

打印以 103 开头的行   sed -n ‘/^103/ p‘ example.txt

打印以 Manager 结尾的行   sed -n ‘/Manager$/ p‘ example.txt

以数字开头,而且是连续重复三次   sed -n ‘/^[0-9]\{3\}/ p‘ example.txt

每隔一行打印一次    sed -n ‘1~2 p‘ example.txt

1.3 sed 的 d 命令(delete)

删除 103 字符串所在的行   sed ‘/103/ d‘ example.txt

因为 d 命令跟 P 命令的语法是一模一样的, 所以这里不再多举例。

1.4 更多 sed 选项

-f 从文件中读入命令

新建 cmd.sed 命令文件,文件内容如下:  /Jane/ p

在终端输入命令:sed -f cmd.sed example.txt

可在以命令文件中写多个命令

-e 选项执行多个命令

打印 Jason 和 Jane 所在的行  sed -n -e ‘/Jane/ p‘ -e ‘/Jason/ p‘ example.txt

20. 替换命令格式 sed ‘[address-range|pattern-range] s/originalstring/replacement-string/[substitute-flags]‘ inputfile

address-range:地址列表,表示从哪个地方开始执行,如:1,3 表示第一行 到第 3 行。

pattern-range:样式列表,表示从哪个样式匹配串开始。如:/Jane/,表示 从行中包含字符串 Jane 的行开始执行。[]中的都是可选的。 s:表示要执行替换命令(substitute)

originalstring:需要被替换的字符串

replacement-string:替换后的字符串。

substitute-flags:可选替换标志符。

2 准备工作 新建一个 example.txt 文本,输入以下内容: 101,John Doe,CEO 102,Jason Smith,IT Manager 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager

21. 3 address-range 和 pattern-range

a) 把第一行的 John 替换成 guozi 字符串 sed ‘1 s/John/guozi/‘ example.txt

b) 把第二行至第五行的 Manager 替换成guozi sed ‘2,5 s/Manager/guozi/‘ example.txt

c) 把 John 所以字符串行当中的 CEO 替换成 XXX sed ‘/John/ s/CEO/XXX/‘ example.txt

d) 从第四行而且包含字符串 Ram 的行中,把 Developer 字符串替换成 XXX

sed ‘4,/Ram/ s/Developer/XXX/‘ example.txt

e) 如果没有 address-range 和 pattern-range,那么就会把每一行碰到的第一 个匹配字符串给替换掉。

sed ‘s/1/AAA/‘ example.txt

4 substitute-flags

3.1 全局标志 g(globe)

全局标志会把遇到的所有满足条件的字符串给替换掉

sed ‘s/1/AAA/g‘ example.txt

3.2 数字标志 1,2,3

把要匹配串中的第 2 个符合条件的匹配串替换成我们想要的字符串

sed ‘s/1/AAA/2’ example.txt

3.3 又见 p(print)标志  sed -n ‘s/1/AAA/p‘ example.txt

3.4 写标志 w(write) 把每一行碰到第一个字符串 John 替换成 guozi 字符串,并写入 output.txt 中

sed ‘s/John/guozi/w output.txt‘ example.txt 对比重定向

重定向会把所以输出到终端的内容全部放到文本当中,而 w 开关只会把

我们所做过修改的行写入文件当中。

3.5 敏感标志 i(ignore flag)

忽略大小写,把文本当中所有包含 jason 字符串的行替换成 AAAA 字符串

sed ‘s/jason/AAAA/gi‘ example.txt

3.6 联合使用标志 可以使用多个标志来对字符串进行替换并保存

sed ‘s/jason/AAAA/gipw output2.txt‘ example.txt

5 替换命令定界符

格式 1:Sed ‘s///’ example.txt

格式 2:Sed ‘[email protected]@@’ example.txt 用处:使用合理的定界符可以方便的阅读我们的程序代码。

6 强大的&——样式匹配

将 origin-string 替换到 replace-string 当中

sed ‘s/John/[&]/‘ example.txt

需求:将开头为三位数字的外面再加一层{}

22. 1 直接替换文本内容

有用的-i 选项——强烈要求记住此选项!

2 上一堂课作业讲解

作业:将如下的文本前面三位数截取出来,并加上大括号

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

最终输入效果为:

{101}

{102}

{103}

{104}

{105}

解法一:sed ‘s/\(^[0-9]*\),.*/{\1}/g‘ example.txt

解法二:sed ‘s/\([^,]*\).*/{\1}/‘ example.txt

3 其它实例详解

a) 截取网卡 IP 地址

解法一:使用 cut 命令

ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f 1

解法二:用 grep 命令

课后大家思考一下。

解法三:sed 命令

1) ifconfig eth0 | sed -e ‘/inet addr/ !d‘ -e ‘s/[^0-9]*//‘ -e

‘s/ .*//‘

2) ifconfig eth0 | sed -e ‘/inet addr/ !d ; s/[^0-9]*// ;s/ .*//‘

3) ifconfig eth0 | sed -e ‘/inet addr/ !d;

s/\([^0-9]*\)\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\2/‘

解法四:awk 命令

暂时不举例。

b) 去除注释和空行

sed ‘s/^#.*//g‘ my.cnf  sed -i -e ‘s/^#.*//g ; /^$/d‘ my.cnf

23. 1. 使用 a 命令追加行

格式:sed ‘[address] a the-line-to-append‘ input-file

示例:

1) 在文本的第2行后追加一行

sed ‘2 a 203,Jack Johnson,Engineer‘ employee.txt

2) 在文本最后追加一行

sed ‘$ a 106,Jack Johnson,Engineer‘ employee.txt

3) 在文本匹配处增加多行

sed ‘/Jason/a\

203,Jack Johnson,Engineer\

204,Mark Smith,Sales Engineer‘ employee.txt

2. 使用i命令插入行

格式:sed ‘[address] i the-line-to-insert‘ input-file

用法跟a命令类似,不同的是在匹配地址所有行之前

3. 使用c命令修改行

格式:sed ‘[address] c the-line-to-insert‘ input-file

意义不同,用法类似

4. 使用l命令打印隐藏字符   格式:sed –n l input-file

5.使用=命令打印行号    格式:sed = input-file

打印字符串所在行号    sed ‘/string/ =’ input-file

6.使用y命令作字符转换

格式: sed ‘y/original-string/replace-string/’ input-file

示例:sed ‘y/abcde/ABCDE/‘ employee.txt

可用于加密字符串

7.使用q命令终止执行

示例:sed ‘5 q’ input-file 执行完第5行后终止

sed ‘/root/ q’ input-file匹配到root行后退出

24. 4. awk命令格式

格式1:awk -Fs ‘BEGIN{ } /pattern/ {action} END{ }‘

input-file

说明:-F指定分隔符

1) 示例:按逗号分割,并打印1,2,3段

awk -F, ‘{print $1,$2,$3}‘ employee.txt

2) 示例:awk -F: ‘/mail/ {print $1}‘ /etc/passwd

5. Awk内置变量

1) awk分割符FS

awk ‘BEGIN { FS=","; \

print "-------------\nName\tTitle\n-------------" } \

{ print $2,"\t",$3; } \

END {print "-------------"}‘ employee.txt

2) 指定多个分隔域

格式:awk ‘BEGIN {FS="[,:%]"} {action} input-file

awk ‘BEGIN {FS="[,:%]"} {print $2, $3}‘ employee.txt

3) 输出分隔符OFS

awk -F ‘,‘ ‘{print $2, ":", $3}‘ employee.txt

等同于awk -F ‘,‘ ‘BEGIN { OFS=":" } { print $2, $3 }‘

employee.txt

4) 指定分割符并换行RS

指定分割字符,将一行分成多行 输入示例: 103 Raj Reddy Sysadmin - 104 Anand Ram Developer - 105 Jane Miller Sales Manager 输出: John Doe:CEO Jason Smith:IT Manager Raj Reddy:Sysadmin Anand Ram:Developer Jane Miller:Sales Manager

awk ‘BEGIN { FS="\n"; RS="-\n"; OFS=":" } \

{print $2, $3}‘ tmp.txt

5) 输出分割符ORS

awk ‘BEGIN { FS=","; OFS="\n";ORS="\n---\n" } {print

$1,$2,$3}‘ employee.txt

1)细谈print与printf

print中变量不需要加引号,字符串需要加引号

示例:date | awk ‘{print "Month: " $2 "\nYear:",$1}‘

2)printf跟C语言基本一致

转义字符

- %c 字符  %s 字符串   %d 十进制整数   %f 浮点型

程序名 状态 版本 用户

COMMAND STATUS VERSION USER

3)OFMT变量控制输出

date | awk ‘{OFMT="%.2f"; print 1.3456,3.45}‘

3. 实例应用

1)将以下字符串以:分隔,分成多行

101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand

Ram:105,Jane Miller

实现:awk ‘BEGIN{RS=":"}{print $0}‘ example1.txt

2)windows与Linux文件格式转换

awk ‘BEGIN{RS="\n";ORS="\r\n"}{print $0}‘ README.txt >README.WIN

2)NR 内置变量

记录处理的行号

awk ‘ /Jason/{ print NR, $0}‘ test.txt

注意: NR 变量不会重置计数器

4. FILENAME 内置变量

同时处理多个文件时,用来标志当前处理的文件名

注意:

1) 处理文本时显示文件名

2) 从管道输入流接收内容时显示“-”

5. FNR 内置变量

跟 NR 内置变量类似,但会重置计数器。

探讨以下三个环境配置文件的执行顺序

1、/etc/profile

以root用户登录的前提下

2、/root/.bashrc(等同于~/.bashrc)

3、/root/bash_profile(等同于~/.bash_profile)

实验结果表示,执行顺序依次为:

/etc/profile

~/.bashrc

~/.bash_profile

以普通用户登录,发现依然加载了/etc/profile中的环境变量,而没有执行/root目录下的/root/.bashrc和/root/.bash_profile

这个说明/etc/profile是对全局生效,即所有用户都生效。

总结一下,环境变量加载配置文件的顺序为:

首先加载全局环境变量配置文件,然后加载私有环境变量配置文件。

命令的基本格式

find pathname -options [-print -exec -ok]

pathname 目录路径。

-print 输出到标准输出。

-exec 对匹配的文件执行该参数所给出的 s h e l l 命令,命令的形式为

‘command {} \;’注意{ }和\;之间的空格。

-ok 和- e x e c 的作用相同, 只不过以一种更为安全的模式来执行该 参数所给出的 shell 命令,在执行每一个命令之前,都会给出提示,让用户来确 定是否执行。

3 find 其它有用选项

-name 按照文件名查找文件。

-perm 按照文件权限来查找文件。

-prune 使用这一选项可以使 f i n d 命令不在当前指定的目录中查找,如果 同时使用了-depth 选项,那么 - prune 选项将被 find 命令忽略。

-user 按照文件属主来查找文件。

-group 按照文件所属的组来查找文件。

-mtime -n +n 按照文件的更改时间来查找文件,类似的还有-ctime -atime

-newer file1 ! file2 查找更改时间比文件 f i l e 1 新但比文件 f i l e 2 旧的文 件。

-type 查找某一类型的文件,诸如:

b - 块设备文件。 d - 目录。  c - 字符设备文件。

p - 管道文件。  l - 符号链接文件。   f - 普通文件。

-size n[c] 查找文件长度为 n 块的文件,带有 c 时表示文件长度以字节计。

-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中 查找。

4  find 和 xargs 跟-exec 命令类似,不一样的地方是它是接在管道后面,而且一次性只传送 部分参数,可以避免大参数文件传送时报告参数错误的提示。

5 命令的别名

可以使用alias命令来给复杂的变量和参数重新命名,比如:

alias showipt=‘iptables -nL‘

alias应用的场合:它可以用在一些命令参数比较多,而且经常使用的地方,进行变量和参数别名的替换。

alias findtxt=‘find /root/  -type f -name *.txt‘

使用stty命令加参数[-]echo来进行输出【不】回显

cal [-smjy13] [[[day] month] year]

[之间是可选的]  [[[day] month] year] 如果只有一个数字,那么表示年份,如果有两个数字,那么表示月和年,如果有三个,那么表示日,月,年

提问:如果我想把时间格式化成:2014-08-21 21:25:00,该怎么做?

使用如下命令达到目的:

date "+%Y-%m-%d %H:%M:%S"

提问:如何设置系统时间?

date -s "2014-08-21 21:28:00"

提问:如何计算时间戳?

date -d "2014-08-21 21:30:00" +%s

提问:为什么要计算时间戳?

为了计算时间差。

提问:如何根据时间戳得出日期?

以时间戳1408681800为例

date -d @1408681800 "+%Y-%m-%d %H:%M:%S"

locate 和 find

locate 命令是基于 whatis命令数据库而查找的

查找home目录下名为flood.c的文件

find /home/ -name flood.c

find命令是在home目录下递归进行查找,它将会找出所以home目录下符合文件名规则的文件。

查找home目录下不区分大小写的,而且文件名flood.c的文件。

find /home -iname flood.c

-i : case-insensitive   不敏感

基于用户查找:

find /home/sh/ -user guozi

基于组查找:

find /home/sh/ -group guest

1、查找用户为guozi而且组为guest的文件

find /home/sh -user guozi -group guest

find /home/sh -user guozi [-a] -group guest

2、查找用户为guozi,或者组为guest的文件

find /home/sh -user guozi -o -group guest

3、查找用户为guozi,或者组为guest,而且文件名为guozi.guest.txt的文件

find /home/sh -user guozi -o guest -a -name guozi.guest.txt

4、查找文件名不为guozi.guozi.txt的文件

find /home/sh ! -name guozi.guozi.txt

时间: 2024-08-28 06:58:28

shell学习笔记---抄录的相关文章

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

SHELL学习笔记----IF条件判断,判断条件

SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here       elif list then           do another thing here       else          do something else here fi  EX1: #!/bin/bash if [ `uname -m` == "x86_64" ]

Linux Shell 学习笔记

2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用. exit(0)表示正常退出执行程序,如果加其它的数值:1,2,....可以表示由于不同的错误原因而退出 . main函数中exit(0)等价于return 0. 1. Linux下一条命令或一个进程执行完成会返回一个一个状态码. 0 === 成功执行 非0 === 执行过程

shell学习笔记

一.shell变量 1.变量名与赋值符号间不能有空格. 2.首个字符必须为字母a~z或A~Z. 3.使用一个已定义的变量,在变量名前加'$',如: myName=“firefly” echo $myname echo ${myName} 加花括号帮助识别变量的边界,建议加上s. 4.删除变量:unset varName,不能删除只读变量. 5.三种变量:局部变量.环境变量.shell变量 二.shell替换 1.变量替换 echo -e "hello, Emma!\n" 若无-e,则不

[Bash Shell] Shell学习笔记

1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序.建立文件并以并行的方式协调各个程序的运行.因此,对于用户来说,s

shell学习笔记之六(测试和判断)

测试和判断 测试 利用命令执行后的$?来判断命令是否执行正常.$?==0 ? 正常:错误 测试结构: 1.test expression 2.[ expression ] #注意表达式两侧的空格 方式2增加了代码的可读性,且更容易与if,case,while这些条件判断的关键字联用. 文件测试: 1.test file_operator FILE 2.[ file_operator FILE ] 例: test -e /var/log/message echo $? #文件存在返回0,不存在返回

CentOS 7 之Shell学习笔记

脚本是个永恒的话题,以前Dos下面也有Shell编程这一说的,比如说BAT文件有人写的好的话,也是瞬间速度变高大上.Linux下面这个应该更占比重了.我看到园子里有位园友做了一个Linux Shell脚本攻略 读书笔记,笔记概括总结的太好了,值得逐一实践. 为学Linux ,我读过的书藉, 这篇也是个不错的总结,前人的经验真是宝贵,分享真是一种态度.

shell 学习笔记整理(二)

特殊字符:    #! 开始的标志    ;  多个命令一起连用的分隔符    [[email protected] log]# echo a;echo b;echo c    a    b    c    .  多种作用:        1. 相当与 source 命令        2. 作为文件名称的一部分(隐藏文件名)  (使用ls -a  可以查看linux下面的隐藏文件)        3.如果作为目录名的话,一个单独的点代表当前工作目录,两个点代表上一级目录.           

Shell学习笔记 - 环境变量配置文件

一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [[email protected] ~]# source /etc/profile #让/etc/profile配置文件生效 [[email protected] ~]# . /etc/profile #与上面的命令效果一样 二.全局环境变量配置文件 全局环境变量配置文件会对所有用户生效. 1. /etc/profile 作用: 1) 定义U