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

你可能感兴趣的:(Linux Shell 脚本编写学习)