1.shell
1.1什么是shell
Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。
Shell既是一种命令语言, 又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问Linux内核的服务。
Ken Thompson的sh是第一种Unix Shell, Windows Explorer是一个典型的图形界面Shell。
1.2什么是shell脚本
1.2 . 什么是shell脚本
Shell脚本( shell script) ,是- - 种为shell编写的脚本程序,一- 般文件后缀为 . sh。
业界所说的shell 通常都是指shell脚本,但shell和shell script是两个不同的概念。
1.3shell环境
Shell编程跟java、php 编程一样,只要有一个能编写代码的文本编辑器和一个
能解释执行的脚本解释器就可以了。
Shell的解释器种类众多,常见的有:
sh - 即Bourne Shell。sh是Unix标准默认的shell.
bash - 即Bourne Again Shell。bash 是Linux标准默认的shell。
fish - 智能和用户友好的命令行shell.
xiki - 使shell控制台更友好,更强大。
zsh - 功能强大的shell与脚本语言。
指定脚本解释器
在shell脚本,
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的Shell解释器。
2.如何执行
2.1 创建后缀名为. sh的文件
touch test. sh
2.2 打开文件进行编辑
vim test. sh
2.3 指定bash解释器↔
#! / bin/ bash
2.4 编写代码
2.5 执行
/ root/ test. sh 或者. / test. sh
3.echo输出
echo '你好,世界'
4.变量
4.1变量命名原则
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线( _) 。
不能使用标点符号。
不能使用bash里的关键字( 可用help命令查看保留关键字) 。
4.2访问变量
访问变量的语法形式为: ${ var} 和 $var
示例:
word= "hello"
echo${ word}
5.运算符
5.1算术运算符
+ 加法
expr $X十py结果为30 。
- 减法
expr $x- $y结果为- 10 。
* 乘法
expr $x * $y结果为200 。
/ 除法
expr$y/ $x结果为2 。
% 取余.
expr$y% $x结果为0 。
= 赋值
x= $y将把变量y的值赋给X。
== 相等。
用于比较两个数字,相同则返回true 。[ $x== $y] 返回false
[ $x== $y]
!= 不相等。
用于比较两个数字,不相同则返回true 。[ $x!= $y] 返回true
案例:
i= 10 ;
j= 20 ;
z= $( ( ${ i} + ${ j} ) ) ;
echo ${ z}
5.2关系运算符
- eq 检测两个数是否相等,相等返回true 。
- ne 检测两个数是否相等,不相等返回true 。
- gt 检测左边的数是否大于右边的,如果是,则返回true 。
- It 检测左边的数是否小于右边的,如果是,则返回true 。
- ge 检测左边的数是否大于等于右边的,如果是,则返回true 。
- le 检测左边的数是否小于等于右边的,如果是,则返回true 。
案例:
vim test. sh
i= 10 ;
j= 10 ;
if { [ ${ i} - eq ${ j} ] }
then
echo "i==j"
fi
5.3布尔运算符
! 非运算
- o 或运算
- a 与运算
5.4逻辑运算符
&& 逻辑的 AND
5.5字符串运算符
= 检测两个字符串是否相等, 相等返回true 。
!= 检测两个字符串是否相等, 不相等返回true .
- z 检测字符串长度是否为0 , 为0 返回true 。
- n 检测字符串长度是否为0 , 不为0 返回true .
str 检测字符串是否为空, 不为空返回true 。
5.6文件测试运算符
- b file
检测文件是否是块设备文件,如果是,则返回true .
- C file
检测文件是否是字符设备文件,如果是,则返回true 。
- d file
检测文件是否是目录,如果是,则返回true 。
- f file
检测文件是否是普通文件( 既不是目录, 也不是设备文件) ,如果是,则返回true 。
- g file
检测文件是否设置了SGID位, 如果是,则返回true .
- k file
检测文件是否设置了粘着位( Sticky Bit) ,如果是, 则返true .
- p file
检测文件是否是有名管道,如果是, 则返回true 。
- u file
检测文件是否设置了SUID 位,如果是,则返回true 。
- r file
检测文件是否可读, 如果是,则返回true 。
- W file
检测文件是否可写如果是,则返回true 。
- X file
检测文件是否可执行,如果是,则返回true 。
- S file
检测文件是否为空( 文件大小是否大于0 ) ,不为空返回true 。
- e file
检测文件( 包括目录) 是否存在,如果是,则返回true 。
案例:
file= "/ root/ a;
if [ - d ${ file} ]
then
echo "if" ;
else
echo "else"
mkdir "/root/a"
fi
示例:
file= ' "/绝对路径/a.sh"
if [ - r $file ]
then
echo "[ -r \$file ]文件可读"
else :
echo "[ -r \$file ]文件不可读"
fi
6.控制语句
6.1:if
由[ [ ] ] ( sh中是[ ] ) 包起来的表达式被称作 检测命令 或 基元。
这些表达式帮助我们检测一个条件的结果。
这里可以找到有关bash中单双中括号区别的答案。
案例:
if [ [ "abc" - eq "abc" ] ]
then
echo"" abc"-eq" abc"result is: true"
fi
6.2 if else语句
if [ [ 2 - ne 1 ] ] ; then
echo "true '
else
echo"false '
fi
6.3 if elif else
i= 10 ;
j= 14 ;
if [ [ ${ i} - ge ${ j} ] ] ; then
echo "i=j" ;
elif [ [ ${ i} - ge ${ j} ] ] ; then
echo "i>=i" ;
else
echo "i!=j" ;
fi
6.4 for循环
for ( ( i= 0 ; i < 10 ; i++ ) ) ; do
echo ${ i}
done
6.5while循环
x= 1 ;
while [ [ ${ x} - lt 10 ] ] ; do
echo $( ( x* x)
x= $( ( x + 1 ) )
done
7.接收键盘输入
7.1 read
- t : 等待时长
- p : 提示信息
- n : 接收内容
- S : 隐藏输入
案例:
#! / bin/ bash
read - t 3000 - s - p "请输入你的密码" pwd
echo - e "\n"
echo "你输入的内容是" ${ pwd}
read - t 3000 - n 6 - p "请输入你的密码" pwd
echo - e "\n"
echo "你输入的内容是" ${ pwd}
#提示 “请输入姓名” 并等待30 秒,把用户的输入保存入变量name中I
read - t 30 - p "请输入用户名称:" name
echo - e "\n"
echo "用户名为:$name"
#提示“请输入密码”并等待30 秒, 把用户的输入保存入变量age中, 输入内容隐藏
read - t 30 - s - p "请输入用户密码:" age
echo- e "\n"
echo "用户密码为:$age"
#提示"请输入性别”并等待30 秒, 把用户的输入保存入变量sex中,只接受一个字符输入
read - t 30 - n 1 - p "请输入用户性别:" sex
echo- e "\n"
echo "性别为$sex'
案例
touch test. ch
ll
chmod u+ x test/ sh
ll
vim test. sh
#! / bin/ bash
#第一行的代码
echo "第一行基本的代码"
:wq
cat test. sh
/ root/ test. sh
vim test. sh
index= 10 ;
echo ${ index} ;
/ root/ test. sh
if 语句
if [ [ "abc" - eq "abc" ] ]
then
echo"" abc"-eq" abc"result is: true"
fi
if else if 语句
if ( 启动) [ [ 2 - ne 1 ] ] ; then
echo "true '
else
echo"false '
fi(结束)