ubuntu 下进行测试
shell 简介
shell 是在 linux 环境下执行的一种脚本语言。
shell 的类型
- sh
- dash
- bash (标准)
- rbash
使用以下命令查看当前操作系统支持的 shell 语言:
cat /etc/shells
使用以下命令查看 bash 的位置
which bash
bash 编写
新建 .sh 文件
cat hello.sh
#! /bin/bash
# 注释
echo "hello world"
1 : bash 的位置,让解释器知道这个文件是bash 语言编写的,要按照 bash 的规则解释
2: 在屏幕上打印 hello world
更改 .sh 文件的权限用于执行
chmod +x hello.sh
变量
使用 $ 来引用变量
- 系统变量:系统变量由操作系统创建和维护,一般情况下大写
- 用户变量: 用户自定义
系统变量
直接引用,不用声明变量
echo $BASH # 打印输出bash的位置
echo $BASH_VERSION # 打印bash版本
echo $HOME # home目录
echo $PWD # 当前工作的目录
用户变量
需要声明变量,变量名不能以数字开头,否则不能识别
name = Mark
echo "The name is $name"
获取用户输入
echo "Enter name: "
read name # 将用户输入值保存为变量 name
echo "my name is $name"
多个变量
echo 'Enter your name:'
read name1 name2 name3
实时显示用户输入
read -p 'username: ' user_var # 显示用户输入
read -sp 'password: ' pass_var # 静默输入,不会显示用户输入的内容
输入数组
echo "Enter name: "
read -a names
echo "Names: ${names[0]} ${names[1]}"
按照输入位置传递参数
echo $1 $2 $3
args = ("$@") # 按位置获取所有参数并传到一个数组中
echo ${args[0]} ${args[1]} ${args[2]} # 打印参数
echo $# # 打印参数数量
./bash.sh zby zby1 zby2 # 执行命令
zby zby1 zby2 # 输出
3
条件语句
#! /bin/bash
if [ condition ]
then
statement
elif
then
statement1
else
statement2
fi # 结束if
#! /bin/bash
count = 10
if [ $count -eq 9 ] # count 是否等于 9
then
echo "condition is true"
else
echo "condition is false"
fi
注: 在 [ ] 前后要加空格再写表达式,否则可能会出崔
比较大小
整型比较
- -eq : equal 等于
- -ne : not equal 不等于
- -gt : greater than 大于
- -ge : greater than or equal 大于等于
- -lt : less than 小于
- -le: less than or equal 小于等于
字符串比较
- = : 等于
- == : 等于
- != : 不等于
- <
- -z : 字符串为空
bash中 = 和 == 都可以用来比较两个字符串是否相等
文件运算符
文件是否存在
#! /bin/bash
echo -e "Enter the name of file: \c" # -e 用于解释\c,\c 将光标保持到一行上
read file_name
if [ -e $file_Name ] #判断文件是否存在
then
echo "$fine_name found"
else
echo "$file_name not found"
fi
- -e 文件是否存在
- -f 文件是否是一个常规文件
- -d 目录是否存在
- -b 判断文件是否是block special file,二进制文件,如视频、音乐图片等文件
- -c 判断文件是否是character special file,是否是字符文件,普通文本等
- -s 判断文件是否为空
- -r -w -x 判断文件是否有读、写、执行权限
逻辑运算
if [ "$age" -gt 18 -a "$age" -lt 30 ] # -a 表示and
if [[ "$age" -gt 18 && "$age" -lt 30 ]]
if ["$age" -get 18 ] && [ "$age" -lt 30 ]
计算
num1 = 50
num2 = 6
echo $(( num1 + num2 ))
echo $(( num1 \* num2 )) # 使用乘法运算时要用/ 转义
echo $(expr num1 \* num2 ) # 使用expr 不用加括号