shell的两种执行方式:
1.使用./ 脚本名执行
chmod u+x shell脚本名--给当前用户一个可执行权限,如果别的用户需要执行权限,可以给其它用户可执行的权限,然后使用 ./shell脚本名 执行该脚本
2.sh shell脚本名
shell的debug模式:
1.sh -x shelll脚本名
2.在 脚本中 #!/bin/bash -x ,然后使用./shell脚本名执行
shell中变量:Linux Shell中的变量分为“系统变量”和“用户自定义变量”,k=v的形式,变量名称一般为大写,=前后不能有空格,可以使用set查看当前所有系统变量,常见的系统变量:$HOME、$PWD、$SHELL、$USER等等
eg:
a=1
echo $a
echo ${a}
两种方式都可以调用变量,但是推荐第二种方式。(思考一下为什么)
只读变量:readonly
age=10
readonly age
age=20 #执行时报错,提示不能修改
echo "$age"
删除变量: unset
age=10
unset age
echo "$age" #没有结果
Shell中的特殊变量
$? 表示上一个命令退出的状态(是否执行成功)
$$表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1) $1,$2,$3,.........
$# 表示参数的个数,常用于循环
eg:
#!/bin/bash
echo "$1,$2,$3"
echo "第一个参数的值是:$1"
echo "第三个参数的值是:$3"
echo "参数的个数是:$#"
echo "运行的状态是:$?"
echo "当前运行的编号是:$$"
echo "参数列表:$*"
传递参数只需要在执行shell脚本的时候:sh shell脚本名 参数1 参数2 参数3...
关于单引号和双引号:
' ':单引号中的东西会原样输出
" ":双引号中的会进行转义
eg:
echo '$$' #则会输出 $$
echo "$$" #则会输出当前运行的进程号
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数,当它们被双引号" "包含时,
"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;
"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
Shell 注释
注:单行注释:注释行首加 #,sh只支持单行注释。
Bash多行注释:<<EOF
[注释内容]
EOF
shell中的计算:使用expr计算,也可以使用awk
#!/bin/sh
a=10
b=20
c1=`expr $a - $b`
c2=`expr $a + $b`
c3=`expr $a \* $b`
c4=`expr $a / $b`
echo "$a - $b => $c1"
echo "$a + $b => $c2"
echo "$a \* $b => $c3"
echo "$a / $b => $c4"
结果为:
10 - 20 => -10
10 + 20 => 30
10 \* 20 => 200
10 / 20 => 0
注意:
1. 运算符前后都要有空格
2.运算操作使用不是双引号也不是单引号,是(英文模式下)反引号``
3. 乘法运算的时候 运算符* 要使用转义符 \*
4.if判断中,-gt是大于,-lt是小于,-ge是大于等于,-le是小于等于,-eq是等于,-ne是不等于
5.数字之间比较用: 1!=2 或者 1 -ne 2 表示不相等
1 = 1 或者 1 -eq 1 表示相等
字符串之间比较用:
“a” != “b” 表示不相等
“a” = “a” 表示相等
一定注意: 运算符前后必须有空格
文件测试运算符:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0ed14ab1646d1e4bc7dc03c8c48324b3.png)
关于shell中循环:
for循环语法1
arr=($1 $2 $3)
for value in ${arr[@]}
do
echo $value
done
for循环语法2
arr=($1 $2 $3)
for((i=0;i<${#arr[@]};i++))
do
echo ${arr[i]}
done
while循环语法:
i=0
while [ $i -le 5 ]
do
echo 'y'
let i++
done
关于for循环和while循环中循环条件双括号的问题:
语法:
((表达式1,表达式2…))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。
2、在双括号结构中,引用变量可以不用 $变量名,可以直接使用变量名
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了for,while,if条件测试运算
5、支持多个表达式运算,各个表达式之间用“,”分开
跳出循环:
break:break命令允许跳出所有循环(终止执行后面的所有循环)。
continue:continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
if else语句语法:
if [[ $1 -ge 5 ]]; then
echo $1">5"
elif [[ $1 -le 5 ]]; then
echo $1"<5"
else
echo $1"=5"
fi
case语法:
echo "输入1到3之间的数字:"
echo "亲,输入的数字是:"
read num
case $num in
1)
echo "你选择了1";;
2)
echo "你选择了2";;
3)
echo "你选择了3";;
*)
echo "你没有输入1到3之间的数字";;
esac
函数:
function 方法名 ()
{
操作
}
或者:
方法名(){
操作
}
删除函数:像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示:
unset .f 函数名
脚本的调用:如何在一个脚本中调用另一个脚本呢?
可以直接在一个脚本文件中 sh 另一个脚本文件全称