Linux命令——shell
shell:是指“为使用者提供操作界面”的软件,接收用户命令,然后调用相应的应用程序,分为命令行式shell和图形界面shell。
文件命名规范:文件名.sh (.sh是linux下bash shell 的默认后缀)
一.shell脚本程序
例1.输出hello world
创建——编辑——输入代码——修改权限(可执行)——执行脚本
1)创建文件test.sh
2)编辑内容
注:输出的内容如果包含字母和符号(不包含变量),则需要用引号包括起来。如果是纯数字可以包也可以不包。
3)修改权限为可执行,执行该文件
例2. 使用root用户帐号创建并执行test2.sh,实现创建一个shelltest用户,并在其家目录中新建文件try.html
注:第一次创建时未切换root用户,无权限创建用户
二.变量的使用
变量名的规范:
1)命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
2)中间不能有空格,可以使用下划线“_”,不能使用标点符号
3)变量名的长度不得超过255个字符
4)不能使用bash里的关键字(可用help命令查看保留关键字)。
注:在使用变量的时候一定需要在变量名前面添加一个$符号
例1:使用变量输出hello world
注:双引号能够识别变量,双引号能够实现转义(类似于“\*”)
单引号是不能识别变量,只会原样输出,单引号是不能转义的
反引号(esc键下方的那个键),当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”。
例2:编写一个脚本,执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件
语法:read -p 提示信息 变量名
三.运算符
在shell中,常见的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等。
1.算数运算符
加减乘除运算
第一次引用变量时未使用双引号,原样输出内容,并且影响expr命令对变量的使用
正确写法
2.关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ]
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ]
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ]
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ]
注:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
条件判断语句
语法1(一个条件):
if condition
then
command1
command2
...
fi
单行写法(一般在命令行中执行的时候):if [ condition ]; then command; fi
语法2(两个条件):
if condition
then
command1
command2
...
else
command
fi
语法3(多个条件):
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
3.逻辑运算符
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ]
-o 或(或者)运算,有一个表达式为 true 则返回 true。 [ $a -lt 数值 -o $b -gt 数值 ]
-a 与(并且)运算,两个表达式都为 true 才返回 true。 [ $a -lt 数值 -a $b -gt 数值 ]
4.字符串运算符
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ]
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ]
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ]
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ]
str 检测字符串是否为空,不为空返回 true。 [ $a ]
5.文件测试运算符
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ]
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ]
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ]
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ]
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ]
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ]
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ]
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ]
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ]
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ]
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ]
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ]
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ]
例:查看文件是否可读可执行