Linux Shell 脚本编写学习

shell脚本

Shell Script,Shell脚本与Windows/Dos下的批处理]相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。——引用百度

创建一个简单的脚本

  • 使用命令创建一个脚本文件:
vi simple.sh //simple.sh为文件名称,为.sh格式
  • 进入到编辑文件
#!/bin/dash
echo "开始执行脚本" 
  • 退出并保存,执行脚本:bash+脚本文件名
[root@root ~]# bash simple.sh 
开始执行脚本 //输出内容

#!/bin/dash:#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径
echo:为输出命令,用于输出预设的文字

赋值

输入赋值
#!/bin/dash
echo "begin"
echo "赋值方法一"
read -p "输入一个值进行赋值操作:" value1 value2
echo "value1=$value1"
echo "value2=$value2" 
echo "赋值方法二"
echo -n "输入多个值进行赋值操作:" 
read v1 v2
echo "v1=$v1"
echo "v2=$v2"
[root@root ~]# bash demo.sh 
begin
赋值方法一
输入一个值进行赋值操作:value1 value2 
value1=value1
value2=value2
赋值方法二
输入多个值进行赋值操作:v1 v2
v1=v1
v2=v2

注意:赋值多个值时要用空隔建多值之间进行隔

判断+流程控制语句

可以通过判断语言加流程控制语句来控制命令的执行

判断语句格式

[ -e xxx ]

上述为判断xxx文件是否存在,注意中括号'['后面与']'前面必须都要带一个空格;
1、-d 判断文件是否为文件夹
2、-f 判断是否为文件
3、-e 判断文件/文件夹是否存在
4、-r 判断用户是否有读取权限
5、-w 判断用户是否有写入权限
6、-x 判断用户是否有执行权限

  • 在判断中还可以运用:
    数值比较符:-eq(是否相等),-gt(是否大于),-lt(是否小于),-ne(是否有不等于),-le(是否等于或小于),-ge(是否等于或大于)
    字符串比较符:=(是否相等),!=(是否不等于),-z(是否为空);

流程控制语句:

1、if语句

if 判断语句
  then 命令语句
  else 命令语句
fi

*例如:

#!/bin/bash
echo "开始执行脚本"
if [ ! -e test ]
then    
echo "文件不存在,创建文件夹"
mkdir test
else 
echo "文件夹存在"
fi
  • 执行
[root@root ~]# bash simple.sh 
开始执行脚本
文件不存在,创建文件夹
[root@root ~]# [ -e test ] && echo "true"
true

:结果相反,否的意思,与java一致
&&:为true则执行后续命令
||:为false则不执行后续命令

2、case语句

case 参数 in
  限制条件1 )
  命令语句1
;;
  限制条件2 )
  命令语句2
;;
  限制条件3 )
  命令语句3
;;
*)
  默认执行命令
esac
  • 例如
#!/bin/bash
echo "开始执行脚本"
read -p "请输入一个数字:" value
case "$value" in
   10)
   echo "数字为10"
;;
   20)
   echo "数字为10"
;;
*)
  echo "为其他值"
esac
  • 执行
[root@root ~]# bash simple.sh 
开始执行脚本
请输入一个数字:10
数字为10
[root@root ~]# bash simple.sh 
开始执行脚本
请输入一个数字:21
为其他值

循环语句

1、for循环语句
跳出循环:continue

  • 写法1
#!/bin/bash
echo "开始执行脚本"
read -p "请输入一个循环次数:" value //
for((i=1;i<"$value";i++));
do
echo "循环了$i 次";
done
  • 执行
[root@root ~]# bash simple.sh 
开始执行脚本
请输入一个循环次数:12
循环了1 次
循环了2 次
循环了3 次
循环了4 次
循环了5 次
循环了6 次
循环了7 次
循环了8 次
循环了9 次
循环了10 次
循环了11 次

*写法2

#!/bin/bash
echo "开始执行脚本"
declare -i sum=0 //声明一个变量
for i in {1..10};
do
 let sum+=$i;
done
echo $sum
  • 执行
[root@root ~]# bash simple.sh 
开始执行脚本
55
  • 写法3 读取文件
#!/bin/bash
echo "开始执行脚本"
declare -i sum=0
for i in $(cat test.txt); //读取文件内容
do
echo $i;
done

test.txt内容

[root@root ~]# bash simple.sh 
开始执行脚本
111
222
333
444
555
  • 执行
[root@root ~]# bash simple.sh 
开始执行脚本
111
222
333
444
555

cat的使用

//1.查看文件
cat filename.格式
//2.合并文件
cat filename1.格式 filename2.格式 > newFile.格式
//3.创建并编辑文件
cat > filename.格式
//4.清空文件
cat /dev/null > filename.格式
//5.根据指定内容停止
cat  >> filename.格式 << 结束标识

2、while语句

while true
do 
  执行语句
done
  • 例如
echo "开始执行脚本"
sum=0
while [ $sum -lt 10 ]
 do
    echo $sum
     sum=$((sum+1))
done
  • 执行
[root@root ~]# bash simple.sh
开始执行脚本
0
1
2
3
4
5
6
7
8
9

关键字 ‘expr’ 的用法

  • 功能:

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。由于其在进行数值运算、比较时会进行字符串转义为数值,无法转义则会报错,所以它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。

  • 1、正则表达式匹配
    冒号两边需留出一个空格,正则表达式中自带隐含"^",要暂时匹配字段,正则后面加上"(.)"或"(.*)"
expr string : REGEX 
  • 2、字符串匹配
    查询string2在第string1中有匹配到第字符所在的第一个位置
expr index string1 string2
  • 3、按位置进行字符串截取
expr substr string beginNum endNum
  • 4、获取字符串长度
expr length string
  • 5、数值运算
    字符串表达式的优先级高于数值表达式和逻辑关系表达式
expr num1 +/-/*.. num2 
  • 6、比较运算
expr num1 '<'/<=/=/==/!=/>=/'>' num2
  • 7、逻辑连接符号‘$’和‘|’
    `注意:为防止被转义,需要用''包围``
    规则|:
    1、 "&"表示如果两个参数都非0,则返回第一个参数,否则返回0。但任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。
    2、"|"表示如果第一个参数非0,则返回第一个参数的值,否则返回第二个参数。但如果任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。
expr num1 '&/|' num2
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358