【Linux】shell基础,shell脚本

发布于:2024-05-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

Shell
Shell是一个用C语言编写的程序,接受用户输入的命令,并将其传递给操作系统内核执行。Shell还负责解释和执行命令、管理文件系统、控制进程,是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言
Shell脚本
Shell脚本(shell script),是一种为shell编写的脚本程序。一般提到shell通常都是指shell脚本,但shell和shell script是两个不同的概念

1. Shell环境

Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以。
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
由于易用和免费,bash在日常工作中被广泛使用。同时,bash也是大多数Linux系统默认的Shell。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。

2. 运行Shell脚本两种方法

1、作为可执行程序
例如将代码保存为test.sh,并cd到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

反引号 `,内容当命令执行
单引号 ‘’, 所有字符当作普通字符处理
双引号 “” ,变量会展开为对应的值

3. Shell变量

命名只允许数字、字母和下划线,且不能以数字开头。
大写字母表示常量,避免使用特殊含义的名字比如root、home。
赋值时等号两侧无多余空格,var_name=1;
使用变量值时用美元符号,$var_name
只读变量,比如设置PI=3.1415readonly PI,后续则不能给PI变量赋值
删除变量,unset var,删除后变量不能继续使用,但不能删除只读变量
变量类型,默认变量视为字符串,通过declare或typese命令声明整数变量,declare -i var_integer=54
字符串变量,string=”abcdefg”
echo ${#string}输出字符串长度
echo ${string:1:4}输出字符串第2-5个字符
shell数组,用括号表示数组,元素用空格符隔开
数组名=(元素1 元素2 … 元素n)统一定义;数组名[0]=元素1进行单独定义
${数组名[下标]}进行取值

4. Shell注释

#号开头的行作为注释内容,单行注释

# 注释内容

:’’进行多行注释,内容放在单引号之中

:'
注释内容
'

5. Shell基本运算

expr是一块表达式计算工具,完成表达式求值操作。必须加反引号将其当命令处理,2+2中间空格不能省

val= `expr 2 + 2`
echo “两数之和为:$val

算术运算
算术运算
关系运算
关系运算
布尔运算
布尔
逻辑运算
逻辑运算
文件测试运算
文件测试运算

6. if 条件语句

条件表达式必须放在方括号内[$a -eq $b],以fi结尾,if翻转

if []; then
	代码块1
else
	代码块2
fi

7. for 循环

for var in item1 item2 … itemN
do
	代码块1
done

8. case…esac多选语句

与switch case语句类似,以esac结束,case翻转

casein
值1)
	代码块
	;;
值2)
	代码块2
	;;
esac

9. read 命令
read [选项] 变量名;标准输入,可以从键盘输入,读取文件一行
read -p “提示信息:” var;
read -s var; 隐藏输入内容
read -n字符数 var; 只接受指定字符数量,
read -t “秒数” var; 等待时间
echo [选项] 内容;标准输出

10. Shell脚本
hello world入门

root@Ubuntu:~# cat > hello.sh
#!/bin/bash
echo "hello world!"
root@Ubuntu:~# bash hello.sh
hello world!

当前用户为root,~表示在默认工作目录下工作,一般root默认在/root下工作,普通用户在/home下自己的单独目录下。
cat > hello.sh可以进行输入操作,
输入#!/bin/bashecho "hello world!"后ctrl+c强制结束
使用bash命令或者./或者/bin/bash 接文件名进行运行,./运行一般需要x权限