Loading

Linux - shell 脚本基础

Shell 是一种应用程序,提供用户通过界面访问操作系统内核的服务。

shell 脚本是为 shell 编写的脚本程序,Linux 的 shell 编程种类较多,比如:

  • /bin/sh
  • /bin/bash
  • /bin/zsh

通常情况下,sh 和 bash 是不区分的,下文以 bash 为例。

命名规则

  • 命名只能使用英文字母、数字和下划线,首字符不能以数字开头
  • 不能包含空格
  • 不能使用标点符号
  • 不能使用 bash 内的关键字(可用 help 命令查看保留关键字)

定义与使用变量

# 定义变量
$ name="shell"
# 使用变量
$ echo hello $name
hello shell

# 定义只读变量
$ a=1
$ readonly a
$ echo $a
1
# 重新赋值就会报错
$ a=2
bash: a: readonly variable

# 删除变量
$ b=2
$ echo $b
2
$ unset b  # 删除
$ echo $b

# 无法删除只读变量
$ unset a
bash: unset: a: cannot unset: readonly variable

变量只作用于当前窗口,关掉窗口重新打开,变量就失效了,对只读变量同样有效。

变量类型

  • 字符串: a="123"
  • 拼接字符串: b="$a, 456"
  • 数组: values=(v1 v2 v3)
    • 取单个值: v2=${values[1]}
    • 取全部值: echo ${values[*]}
    • 添加元素: values[3]=4

基本运算

$ a=10
$ b=20

# 严格遵守空格
$ expr $a + $b  # 30
$ expr $a - $b  # -10
$ expr $a \* $b # 200; 乘号需要转义
$ expr $b / $a  # 2;取商
$ expr $a % $b  # 10;取余

# 两数相加其他写法
$ echo `expr $a + $b`
$ echo $(($a+$b))
$ echo $[$a+$b]

$ if [ $a == $b ]; then echo true; else echo flase; fi  # false
$ if [ $a != $b ]; then echo true; else echo flase; fi  # true
  • -eq:相等
  • -ne:不等
  • -gt:大于
  • -lt:小于
  • -ge:大于等于
  • -le:小于等于

控制语句

$ if condition;
> then
> 	 commands;
> elif condition;
> then
> 	 commands;
> else
> 	 commands;
> fi

示例:两数比较大小

$ a=1
$ b=2
$ if [ $a -eq $b ];
> then 
>   echo "equal";
> elif [ $a -lt $b ];
> then
>   echo "less than";
> else 
>   echo "greater than";
> fi
less than

for 循环

# 方式一
$ for var in var1 var2 var3
> do
>  	commands
> done

# 方式二
$ for ((i=1; i<j; i++))
> do
>  	commands
> done

示例:逐行打印文件内容

$ for i in ${cat hotWords};
> do
>  	echo $i;
> done

while 循环

$ while condition
> do
>  	commands;
> done

示例:递减 & 循环读取并打印内容

# 例 1: 递减
$ while (($a>=0)); 
> do 
>  	echo $a; 
>  	let "a--"; # let 计算表达式
> done

# 例 2: 循环读取文件内容并打印
# read 命令用于从终端或者文件中读取输入指令
$ while read line;
> do 
>  	echo $line;
> done < hotWords

以脚本方式运行程序

$ echo "echo demo" > demo

# 运行 sh 脚本方式一
$ sh demo
demo

# 运行方式二; 需要先添加可执行权限
$ chmod +x demo
$ ./demo
demo

脚本参数传递

  • $0 脚本名称
  • $1~$n 获取参数
  • $# 传递到脚本的参数个数
  • $$ 脚本运行的进程 ID
  • $* 以一个单字符串显示所有向脚本传递的参数
  • $? 显示最后命令的退出状态,非 0 都表示有错误
$ cat demo
echo "脚本名称:$0"
echo "参数一值:$1"
echo "参数个数:$#"
echo "进程ID:  $$"
echo "整串参数:$*"
echo "退出状态:$?"

$ sh demo 1 2 3 4 5 6
脚本名称:demo
参数一值:1
参数个数:6
进程ID:  22173
整串参数:1 2 3 4 5 6
退出状态:0
posted @ 2023-03-07 18:41  ABEELAN  阅读(18)  评论(0编辑  收藏  举报