脚本----shell编程
1. 注释
# 单行注释---- 在注释内容前加#
# 多行注释
:<<EOF
多行注释
多行注释
……
EOF
2. 输出
# echo 输出内容-------输出完内容(打印完)自动换行
# echo -n 输出内容 -------- 相当于printf
# printf 输出内容----- 输出完内容后不会换行
printf 100
3. 输入
# read 变量名------不会有提示信息,其余功能与python中的input相同
read name
# 若需要有提示信息,可以配合printf运用:
printf 请输入姓名:
read name
# echo name会输出name这个字符串,要输出它的值须加上$
echo $name
# 只读变量----只能读不能
# readonly a
4. 变量
1)定义变量
变量名=值------等号两边不能有空格
b=100
2)使用变量
$变量
${变量}
age=18
echo $age
age2=${age}
echo ${age2}
5. linux指令
# shell脚本中可以直接执行Linux指令
# 1)直接执行指令
ls -l
# rm -f a_ln2
# 2)获取指令结果
# 法1:变量=$(指令)
t1=$(date "+%Y年%m月%d日 %H-%M-%S")
echo $t1
# 法2:变量=`指令` -----反引号
t2=`date "+%Y年%m月%d日 %H-%M-%S"`
echo $t2
6. 字符串
# shell中的字符串可以用单引号、双引号、不加引号
str1=abc
# 不加引号也是字符串
str2='abc'
str3="abc"
str4='abc\n123'
# 1)字符串拼接:"固定字符串内容${变量名}"
a='abc'
b=123
# 两个字符串拼接:双引号拼接
result="${a}${b}"
result2="hello,${b}"
echo $result
echo $result2
printf 请输入名字:
read name
msg="${name},你好!欢迎来到霍格沃兹,或许你已经有了心仪的学院"
echo $msg
# 2)字符串长度
string="你好!欢迎来到霍格沃兹,或许你已经有了心仪的学院"
echo ${#string}
# 3) 字符串提取-----下标是从0开始
# 第一个数是所提取字段第一个字的下标,第二个数是往后提取几个字
# 第一个数是所提取字段第一个字的下标,第二个数是往后提取几个字
# 字符串:下标:个数 --从字符串中指定下标开始获取指定个数字符,返回一> 个新的字符串
# 字符串:下标:1 -- 获取字符串中指定下标对应的字符
# 字符串:下标 -- 从指定下标开始获取到字符串最后
echo ${string:7:4}
7. 数组
数组名=(元素1 元素2 元素3 ...)
若元素中有空格,则需要给这个元素加引号
names=(小明 小红 小南)
names1[0]=Tom
names1[1]=Jerry
# 直接使用数组名使用的其实是数组的第一个元素
# 下标操作--- 数组[下标]
echo ${names[0]}
echo ${names[1]}
# 获取数组长度
echo ${#names[@]}
echo ${#names[*]}
# 获取数组指定下标元素的长度
# ${#数组[下标]}
names2=(后羿 王昭君 百里守约)
echo ${#names2[2]}
8. 运算符
算术运算符、关系运算符(比较)、布尔运算符(逻辑)、字符串运算符
# 1) 算术运算:+ — * /
# 运算符左右必须要有空格
# 加减法:
a=`expr 10 + 20`
echo $a
b=100
echo `expr $b -20`
# 乘法:
echo `expr 10 \* 3`
# 除法:
# 整数除法
echo `20 / 3`
# 小数除法
echo `expr "scale=2;10 / 3"|bc`
# 求余数
echo `10 % 3`
# 2) 关系运算符:需要与分支或循环结构结合使用
# -eq --- 等于,相当于 ==
# -ne --- 不等于,相当于!=
# -gt --- 大于
# -lt --- 小于
# -ge --- 大于等于
# -le --- 小于等于
# 使用语法: [ 值1 关系运算符 值2 ]
## 注意空格
a=100
b=10
if [ a -ne b ]
then
echo a不等于b
else
echo a等于b
fi
# 3)布尔运算符
# ! -- 逻辑非运算
# -o -- 逻辑或运算
# -a -- 逻辑与运算
age=18
score=95
# 参加比赛的条件:分数大于90分并且年龄大于等于18岁
if [ age -ge 18 -a score gt 90 ]
then
echo 可以参加比赛
else
echo 不可以参加比赛
fi
# 4) 字符串运算符
# [ 字符串1 = 字符串2 ] -- 判断两个字符串是否相等
# [ 字符串1 != 字符串2 ] -- 不相等
# [ -z 字符串] -- 判断字符串长度是否为0
# [ -n "字符串" ] -- 判断字符串长度是否不为0
# [ $ 字符串 ] -- 判断字符串是否是空串
a=abc
b=ghf
if [ $a = $b ]
then
echo a和b相等
else
echo a和b不相等
fi
9. if
语法1:
if 条件语句
then
满足条件执行的代码
fi
语法2:
if 条件语句
then
满足条件执行的代码
else
不满足条件执行的代码
fi
语法3:
if 条件语句1
then
代码块1
elif 条件语句2
then
代码块2
elif 条件语句3
then
代码块3
else
代码块N
fi
10. for循环与while循环
# for循环
# 遍历数组
a1=(10 abc 了)
for i in ${a1[@]}
do
echo "数组:${i}"
done
# 遍历多个值
for i in 10 20 "您好" 123
do
echo "值:${i}"
done
# while循环
# 遍历字符串
str1='erdch890'
i=0
len=${#str1}
while [ $i -lt $len ]
do
echo ${str1:${i}:1}
i=`expr ${i} + 1`
done
# 计算1+2+……+100
num=1
sum=0
while [ ${num} -le 100 ]
do
sum=`expr ${sum} + ${num}`
num=`expr ${num} + 1`
done
echo ${sum}