Linux操作系统里面的一门脚本语言:BASH SH CSH KSH…
使用C语言写出来的一个脚本工具
vim编辑器
shell对于空格有非常严格的要求
第一行:
一定要写上脚本运行的命令所在的位置
#!/bin/bash
变量赋值:
变量的声明和赋值是不能有任何空格的;
所有的变量默认都是当成字符串保存的。
变量名=值
a=10
变量的使用:
${变量名}
echo ${a}
删除变量保存的内容:
unset 变量名
将变量变成只读的类型:
readonly 变量名;
放入单引号的变量不会被读取:
‘${变量名}’
数据类型:
字符串
拼接
变量1{变量1}变量1{变量2}
长度
${#变量名}
截取:序号从0开始
${变量名: 开始序号: 连续取值的长度}
${变量名: 开始序号} 没有连续取值长度表示取值取到最后
取最后一位 ${变量名: ${#变量名}-1: 1}
数组
变量名=(值1 值2 值3 值4 “值5” …)
${数组的变量名} 表示数组里面的第一个元素
${数组的变量名[]} 查看数组里面所有的数据
${数组的变量名[下标的序号]} 查看序号对应的值
${数组的变量名[-1]} 取数组的最后一个元素
${#数组的变量名[]} 获取数组里面有多少元素
数组内容的修改:
数组的变量名[下标的序号]=新的值
数组的变量名[KaTeX parse error: Expected '}', got '#' at position 2: {#̲数组的变量名[*]}]=新的值…{#s[*]}]=‘蚂蚁’
unset 数组的变量名[下标的序号] 删除数组中某个序号的内容
数组没有插入的方法!
数字
–整数
+
- echo
expr ${a} \* ${b}
/ 整数和整数相除还有整数
% 取余运算
** 幂运算
第一种: (((((({变量名}+${变量名}))
第二种: [[[{变量名}+${变量名}]
第三种: expr ${变量名} + ${变量名}
反引号是用来引用系统命令的
第四种: let 变量=变量1+变量2
–小数
+
“变量名+{变量名}+变量名+{变量名}”|bc
/
“scale=小数精度; 变量名/{变量名}/变量名/{变量名}”|bc
自增和自减:
a=10
a++
++a
都是a的自增
let b=++a 先自增再赋值
let b=a++ 先赋值再自增
输入输出:
打印输出:
echo 要打印的东西
打印的时候在字符串内,加上转义符:
echo -e “\t\n\c”
用户输入:
read -p “提示信息” 变量名
逻辑判断:
if判断的语法:
if test 条件判断
then
执行语句
elif test 条件判断
then
执行语句
…
else
执行语句
fi
数字的比较:
小于 -lt
大于 -gt
等于 -eq
小于等于 -le
大于等于 -ge
不等于 -ne
并且 -a
或者 -o
字符串的比较:
等于 ==
不等于 !=
read -p “number1:” a
read -p “number2:” b
read -p “number3:” c
#打印出三个变量值中数字最大的那一个
if test ${a} -ge ${b} -a ${a} -ge ${c}
then
echo ${a}
elif test ${b} -ge ${a} -a ${b} -ge ${c}
then
echo ${b}
else
echo ${c}
fi
case基本语法:
case ${变量名} in
值1) 执行语句;;
值2) 执行语句;;
…
*) 执行语句;;
esac
read -p “星期几?” day
case ${day} in
saterday)
echo ‘今天加班’;;
sunday)
echo ‘今天休息’;;
*)
echo ‘正常上班’;;
esac
case和select结合使用:
select 变量名 in 值1 值2 值3 …
do
执行语句
done
select fruit in apple pear orange pinch
do
case ${fruit} in
apple)
echo “8元”;;
pear|orange|pinch)
echo “9元”;;
*)
echo “没有其他的内容”;;
esac
exit
done
判断文件或者文件夹是否存在
第一种:
read -p “文件名:” n
a=find ./ -name ${n}
if test ${#a} -eq 0
then
echo ‘没有这个文件’
else
echo ‘文件已存在’
fi
第二种;
read -p “文件名:” n
if test -f ${n}
then
echo ‘yes’
else
echo ‘no’
fi
文件的判断用-f ,文件夹的判断用 -d
练习: select+case+if
给用户一个菜单,1.新建文件 2,新建文件夹
给用户输入文件或者文件夹名称的提示,并且保存用户输入的信息
判断这个文件或者文件夹是否存在,不存在则新建一个,存在则提示
select c in file directory
do
case ${c} in
file)
read -p ‘输入文件名:’ n
if test -f ${n}
then
echo ‘文件已存在’
else
touch ${n}
echo ‘文件新建成功’
fi;;
directory)
read -p ‘输入文件夹的名字:’ n
if test -d ${n}
then
echo ‘文件夹已存在’
else
mkdir ${n}
echo ‘文件夹创建成功’
fi;;
*) echo ‘只能选1和2!’
esac
break
done
循环控制:
for循环语法:
类python语法:
使用数组作为循环范围
for 变量名 in ${数组[*]}
do
执行语句
done
fruits=(apple pear orange pinch banana)
for f in ${fruits[*]}
do
if test ${f:0:1} == ‘p’
then
echo ${f}
fi
done
使用数字作为循环范围
s=0
for i in {1…10}
do
let s=s+i
done
echo ${s}
for i in {1…10…2}
do
echo ${i}
done
for i in seq 1 2 10
do
echo ${i}
done
类C语法:
for ((变量=初始值; 变量>=结束值; 变量的自增或者自减))
do
执行语句
done
循环关键字:
continue 跳过循环
break 跳出循环
while循环:
while [ 判断条件 ]
do
执行语句
done
n=1
while [ ${n} -lt 10 ]
do
echo ${n}
let n=n+2
done
九九乘法表
for ((i=1;i<=9;i++))
do
for ((j=1;j<=i;j++))
do
let ji=i*j
echo -e “jx{j}xjx{i}=${ji}\t\c”
done
echo
done
打印出平行四边形
#****
****
****
****
for i in {1…4}
do
let k=i-1
for ((kong=1;kong<=k;kong++))
do
echo -e " \c"
done
for j in {1…4}
do
echo -e “*\c”
done
echo
done
函数:只能返回数字
function 函数名字(){
函数的执行语句
return 数字类型
}
调用函数:
函数名字
接收函数的返回值:
$?
声明函数:
function sum_(){
let s=10+20
return KaTeX parse error: Expected 'EOF', got '}' at position 5: {s}
}̲
使用函数:
sum_
接收返…?
echo 数据的返回值是:${a}
带有输入参数的函数:
function sum_(){
let s=$1+$2
return ${s}
}
调用的时候输入参数的值:
sum_ 7 8
也可以在运行文件的时候再进行值的输入
sum_ $1 $2
sh s4.sh 5 7
∗表示传入进来的所有的数据,* 表示传入进来的所有的数据,∗表示传入进来的所有的数据,本身就是一个数组的所有内容
$# 可以查看传入进来的所有参数的数量
function sum2_(){
s=0
for i in $
do
let s=s+i
done
return ${s}
}
sum2_ 2 3 4 5 6
echo $?
在一个文件中导入另一个文件声明好的函数:
#!/bin/bash
. /usr/t1012/s4.sh
sum2_ 4 5 6 7
echo 和:$?
. 表示导入文件
编辑一个函数,函数会接收一个用户的id,根据这个id去自己的hive某个表中查询对应的年龄,并且当成返回值进行显示。