shell编程

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 不用加括号

   转载规则


《shell编程》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录