linux 之shell 脚本(二)

别人说的不全是错的,学会反思


argv[]


today = 'date %Y%m%d'
把当前的日期,存储进了today这个变量。

if后面的“表达式”部分必须被足够的空格分隔得分崩离析才可以。

#!/bin/bash
if [ "$1" = "me" ]; then
    echo "You are dead..."
else
    echo "$1 is dead...."
fi

要注意这个脚本中“[”符号前边和后边、"$1"后边、"="后边、"]"前边,
都要有空格。否则脚本错误。


case

类似于C语言的switch,case语句,


#!/bin/bash
echo "input a number: "
read num
case $num in
one) echo "我认识,这个一";; #双分号表示本条件case结束
two) echo "我认识,这个二";; 
three) echo "这个我得想想....." #每个case可以有多条语句
       echo "哦, 想起来了,这是三";; #一个case的最后一条语句一定要双分号结束。且只有最后一条语句有双分号
*) echo “这个不认识了”;; #使用*)表示其他值,类似于default
esac #表示结束

*) 一行也可以不存在,则匹配不到任何字符串时就不执行任何命令。


Shell中的循环语句

#!/bin/bash
for num in 1 2 3 4 5 six
do 
echo "num = $num"
done

num = 1
num = 2
num = 3
num = 4
num = 5
num = six

#!/bin/bash
for (( num = 1; num<7; num++))
do 
    echo "num = $num"
done

无论是while循环还是for循环,都可以使用break和continue指令。
其中break指令用于跳出当前循环体,执行后面的操作;continue指令用于忽略本次循环,直接回到循环体
的开始位置,执行下一次循环。


文件的所有者、群组、其他。

设置权限的命令----chmod

chmod [设置权限的对象]+/-[权限] [文件]

u代表文件的所有者;
g代表文件的群组;
o代表其他

r代表读
w表示写
x表示执行

chmod u+x ./albert.odt
u代表要对所有者的权限进行操作;
+号代表要增加权限;
x代表要增加的是执行权限。

想去掉family主内的成员对这个文件的读权限,
chmod g-r ./albert.odt


正则表达式

正则表达式(Regular Expression)是指一个用来描述或者匹配一系列符合某个句法规则
的字符串的单个字符串。

6.4.2 初识正则表达式

grep <字符串><文件名>
在“文件名”所指定的文件中,查找带有“字符串”所指定的内容的行,并输出到标准输出。

grep "sed" ./learn.sh > ./sed_command.txt

">" 可以将原本输出到标准输出的内容(即打印到屏幕上的内容),转向到一个文件中。
并且如果文件已经存在,它将覆盖掉文件原有内容。如果不想覆盖文件原有内容,可以使用
“>>”符号,代替“>”,如此则会在文件未尾追加新的内容。

使用“\b”元字符,这个字符代表了单词的开头或者结尾。那么要查找的东西,就应该这样表示:
grep "\bsed\b" ./learn.sh > ./sed_command.txt
这样,像kissed、used这样的词,就不会被匹配到了。这里,我们写的“\bsed\b”就是一个正则
表达式。


元字符         说明
.         匹配任意字符(换行除外)
\w        匹配字母或数字或下划线或汉字
\s        匹配任意的空白符
\d        匹配数字
\b        匹配单词的开始或结尾
^         匹配行首
$         匹配行尾


grep  "\d\d\d\d\d\d\d\d"  diary.txt
查找diary.txt文件中,所有出现了连续8个数字的行。


代码        说明
\W         匹配任意不是字母,数字,下划线,汉字的字符
\S         匹配任意不是空白符的字符
\D         匹配任意不是数字的字符
\B         匹配不是单词开头或结束的位置
[^x]       匹配任意不是x的字符
[^xyz]     匹配任意不是x且不是y且不是z的字符

  

grep  "\D\d\d\d\d\d\d\d\d\D"  diary.txt

查找diary.txt文件中,所有出现了连续8个数字,且此8个数字的前后1个字符都不是数字的行。这样就更能准确地定位
1个固定电话的号码了。

其实这里可以精简一下,写成这样:
grep "\D\d{8}\D" diary.txt

常用的重复

代码          说明
*            重复零次或更多次
+            重复一次或更多次
?           重复零次或一次
{n}          重复n次或更多次
{n,}         重复n次或更多次
{n,m}        重复n到m次

在Linux系统里,只要你觉得某个地方可以用正则表达式来简化操作、提高效率,
那么这个地方就一定支持正则表达式。

猜你喜欢

转载自blog.csdn.net/baiyibin0530/article/details/93063688
今日推荐