Shell
一种弱类型语言(JAVA是强类型语言),一般是.sh结尾的文件
shell script第一行 #!/bin/bash
:声明解释器,其它解释器 /bin/sh、/bin/java、/bin/python
Bash Shell
变量
变量名不能以数字开头
使用变量时带上$
,用{}
可区分变量的边界
- 直接赋值
语法:var=value
=号前后不能有空格
age_=18
name2=tester
- read赋值:输入方式
语法:read [-p "提示信息"] 变量名
可赋值多个变量
read -p "please input:" var1 var2
- 命令结果赋值,反引号(Esc键下方的键)
# 语法
var=`命令`
# 将路径结果赋值给path
path=`pwd`
env:环境变量
系统变量都是大写
/etc/profile
# 系统配置文件
/etc/bashrc
#用户配置文件
~/.bashrc
输出
echo
echo hello word
# 反斜杠\:转义
echo i\'m a boy
name=tester
# 单引号:原样输出
echo 'hello $name'
# 双引号:可以替换变量
echo "hello $name"
执行脚本
- 推荐用法:
./test.sh
使用脚本第一行声明的解释器来运行脚本,需可执行权限(chmod a+x file
) bash test.sh
使用sh来执行脚本,只能运行bash编写的脚本或语法共通的脚本
分支语句
- 语法:
if 条件表达式
then
条件表达式成立做的事情
fi
if 条件表达式;then
条件成立则……
else
条件不成立则……
fi
if 条件1;then
条件1成立则……
elif 条件2;then
条件2成立则……
fi
# 多分支case
case 变量的值 in
匹配的值1)
匹配值1时则……
;;
匹配的值2)
匹配值2时则……
;;
*)
都不匹配时则……
;;
esac
- 示例:
#!/bin/bash
read -p "please inpput a number: " number
if test $number -gt 5
#if [ $number -gt 5 ]
then
echo dayu 5
else
echo ${number}
fi
if test -d /var/log # /var/log是目录吗
then # 是目录则打开
cd /var/log
if [ -e /var/log/test.log] # 文件是否存在
then # 是则输出内容
text=`cat /var/log/test.log`
echo $text
else
echo False
fi
else
echo False
fi
注:if test 条件表达式
等价于 if [条件表达式]
,用[]时,[]及里的元素左右都要有空格
循环语句
- 语法:
for 循环条件
do
循环体
done
while 条件表达式
do
循环体
done
- 示例:
#!/bin/bash
# 循环建5个目录
for i in {1..5}
do
makdir test_$i
done
read -p "please: " num
while [ $num -eq 18 ]
do
echo num is 18
sleep 2
注:产生一个数列 {1..10}
函数
- 语法:
函数名(){
函数体
}
# 调用函数
函数名
- 示例:
# 打印家目录路径
test(){
cd ~
path=`pwd`
echo $path
}
# 调用
test
常见操作
- 声明为只读变量
var=123
readonly var
- 删除变量
var='test'
unset var
echo $var # 不会输出
- 获取字符串长度
var=abc
echo ${#var} # 输出3
- 提取字符串
str="i am a tester"
# 从第1个字符开始截取3个字符
echo ${str:0:3} # 输出 i a
- 算术运算符
需配合其它工具使用 awk或expr
表达式与运算符之间必须有空格
整体用需反引号包含
#!/bin/bash
var=`expr 1 + 2`
echo "和为:${var}"
运算符 | 说明 |
---|---|
-gt | 大于 |
-lt | 小于 |
-eq | 等于 |
-ne | 不等于 |
-ge | 大于等于 |
-le | 小于等于 |
-o | 或运算,有一个为真,则返回true |
-a | 与运算,都为真,才返回true,否则false |
&& | and运算符 |
= | 两字符串相等,相等返回true |
!= | 两字符串不相等 |
-z | 字符串长度是否为0,为0返回true |
-n | 字符串长度是否不为0,为0返回false |
$ | 字符串是否不为空 |
-r file | 文件是否可读,可读返回true |
-w file | 文件是否可写 |
-x file | 文件是否可执行 |
-s file | 文件是否不为空,为空返回false |
-e file | 文件是否存在 |