文章目录
1. 简介
Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
# Shell 脚本 hello.sh
#!/bin/bash
echo 'hello world!'
#! 告诉系统这个脚本需要什么解释器来执行。
文件扩展名 .sh 不是强制要求的。
2. Shell 变量
变量名可以由字母、数字、下划线组成,不能以数字开头,分为系统变量和自定义变量
系统变量: H O M E 、 HOME、 HOME、PWD、$USER等,显示当前Shell中所有变量set
环境变量: export 变量名=变量值
自定义变量:
基本语法
定义变量: 变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
删除变量: unset 变量名.
声明静态变量: readonly 变量名,静态变量不能unset。
使用变量: $变量名
将命令返回值赋给变量(重点)
A=`ls` 反引号,执行里面的命令
A=$(ls) 等价于反引号
- 系统变量/预定义变量
$n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
$* :命令行中所有参数,且把所有参数看成一个整体。
$@ :命令行中所有参数,且把每个参数区分对待。
$# :所有参数个数。
$$ :当前进程的 PID 进程号。
$! :后台运行的最后一个进程的 PID 进程号。
$? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。
- 环境变量
基本语法
- export 变量名=变量值,将 Shell 变量输出为环境变量。
- source 配置文件路径,让修改后的配置信息立即生效。
- echo $变量名,检查环境变量是否生效
3. 判断语句
3.1 if-else/if-elif-if(推荐)
# 1.if
if [ 条件判断式 ];then
程序
fi
# 2.if-elif
if [ 条件判断式 ] then
程序
elif [ 条件判断式 ] then
程序
fi
#3.if-else-elif
if [ 条件判断式 ] then
程序
else [ 条件判断式 ] then
程序
elif [ 条件判断式 ] then
程序
fi
3.2 条件判断式
- 文件判断
-
字符串判断
-
数字判断
- 复杂逻辑
3.3 case
case $变量名 in
"值1")
如果变量值等于值1,则执行此处程序1
;;
"值2")
如果变量值等于值2,则执行此处程序2
;;
...省略其它分支...
*)
如果变量值不等于以上列出的值,则执行此处程序
;;
esac
3.4 案例
#!/bin/bash
# 1.如果输入的参数大于60,输出“及格”,否则输出“不及格”。
if [[ $1 -ge 60 ]]; then
echo "及格"
elif [[ $1 -le 60 ]]; then
echo "不及格"
fi
# 2.判断是否存在文件类型
file="/Users/zhupeng/Desktop/shell.sh"
if [[ -d $file ]]; then
echo "$file is directory!"
elif [[ -e $file ]]; then
echo "$file is file!"
else
echo "$file is not regular file and directory"
fi
# 3.判断是周几
case $1 in
"1" )
echo "周一"
;;
"2" )
echo "周二"
;;
* )
echo "其他"
;;
esac
4. 循环语句
# 1.while
while [ 条件判断式 ]
do
程序
done
# 2.for 语法1
for 变量名 in 值1 值2 值3...
do
程序
done
# 3.for语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
案例
#!/bin/bash
# 1.打印命令行输入的参数
for i in "$*"; do
echo "the arg is $i"
done
echo "==========="
for i in "$@"; do
echo "the arg is $i"
done
# 2. 输出从1加到100的值
SUM=0
for (( i = 0; i < 100; i++ )); do
SUM=$[$SUM+$i]
done
echo $SUM
# 3.读取控制台输入
read -p "请输入一个数num1=" NUM1
echo "你输入num1的值是:$NUM1"
read -t 10 -p "请在10秒内输入一个数num2=" NUM2
echo "你输入num2的值是:$NUM2"
5. function函数
[ function ] funname[()]
{
Action;
[return int;]
}
# 调用
funname 参数1 参数2...
案例
#!/bin/bash
# 1.计算终端输入的参数之和
read -p "请输入第一个参数n1:" n1
read -p "请输入第二个参数n2:" n2
function getSum(){
SUM=$[$n1+$n2]
echo "sum=$SUM"
}
getSum $n1 $n2