Shell 是系统的用户界面,提供用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行,实际上 Shell 是一个命令解释器,解释由用户输入的命令,并且把它们送到内核。
Bash(GNU Bourne-Again Shell)是一个为 GNU 计划编写的 Unix shell ,它是许多 Linux 平台默认使用的 shell。
shell 是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。
准确的说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。
它可以准确将系统调用、公共程序、工具和编译过的二进制程序“粘合”在一起来建立应用,这是大多数脚本语言的特征,所以脚本语言又叫做“胶水语言”
vim hello.sh
sh hello.sh
bash hello.sh
. ./hello.sh(前面的.相当于执行,后面的./相当于加载)
source hello.sh
chmod u+rx hello.sh
echo "hello world" > my.txt
cat my.txt
首先去目录找到这个文件
cd /var/log
打开这个文件看看都有啥
cat wtmp
创建一个shell脚本:cleanlogs.sh,用它去清除!
vim cleanlogs.sh
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > wtmp
echo "Logs cleaned up."
exit
将shell脚本运行起来:
sh cleanlogs.sh
echo "The # asdfghjkl"
echo "The \# asdfghjkl"
echo The # asdfghjkl
echo The \# asdfghjkl
命令分隔符,可以在同一行输入两个命令(echo … ; echo …),用分号分隔开就好
还可以作为 case选项 的终止符号(;;)
三目运算符,是 如果 a小于50成立,t 就取值为 8 ;如果 a 小于50不成立,t 就取值为 9
myname="Baidu"
echo $myname
echo ${myname}
echo ${myname}Good
echo $mynameGood
myname="Google"
echo ${myname}
myurl="http://www.baidu.com"
readonly myurl
myurl="http://www.bing.cn"
for ((m=0;m<20;m++));do
for ((n=0;n<33;n++));do
k=0
while [ $k -lt 100 ];do
sum=`expr $m + $n + $k`
money0=`expr $m \* 5`
money1=`expr $n \* 3`
money2=`expr $k / 3`
money=`expr $money0 + $money1 + $money2`
if [[ $sum -eq 100 && $money -eq 100 ]]; then
echo $m
echo $n
echo $k
fi
k=`expr $k + 3`
done
done
done
敬上参考链接:https://blog.csdn.net/weixin_43168314/article/details/88954059
1-100累加
sum=0
for i in `seq 100`;do
sum=$(($sum + $i))
done
echo $sum
sum=0
for i in `seq 100`;do
sum=`expr $sum + $i`
done
echo $sum
#!/bin/bash
# 输入一个数并进行是否为正整数判断,为正整数则输出1到这个数的累加结果·
while :
do
read -p "请输入一个正整数 :" n
if echo $n | grep -q '[^0-9]'
then
echo "你没有输入一个正整数!"
continue
fi
if [ ! -n "$n" ]
then
echo "你没有输入一个正整数!"
continue
fi
if [ $n -lt 1 ]
then
echo "你没有输入大于1的数! "
continue
fi
for i in `seq $n`
do
j=$(($j+$i))
done
echo $j
exit
done
打印 九九乘法表:
for i in `seq 9`;do
for j in `seq $i`;do
echo -ne ${j} '\*'${i}'='$(($i*$j))
done
echo ''
done
1、做学生成绩系统,如果成绩大于80分,输出优秀,如果成绩大于70分并且小于80分,输出良好,如果成绩大于60分并且小于70分,输出及格,小于60分输出不及格。
read -p '请输入成绩:' score
if [ $score -lt 60 ];then
echo '不及格'
elif [[ $score -ge 60 && $score -lt 70 ]];then
echo '及格'
elif [[ $score -ge 70 && $score -lt 80 ]];then
echo '良好'
else
echo '优秀'
fi
2、输入一个数,判断它是否能被 3、5、7 整除,注意考虑同时整除的情况
read -p '请输入一个数:' a
b=`expr $a % 3`
c=`expr $a % 5`
d=`expr $a % 7`
if [[ $b -eq 0 || $c -eq 0 || $d -eq 0 ]];then
echo '可以'
else
echo '不可以'
fi
3、打印某年某月有多少天。(提示:A、闰年的计算方法:年数能被4整除,并且不能被100整除;或者能被400整除的整数年份。
B、利用%运算可以判断一个数能否被另一个数整除。C、用CASE语句)
read -p '请输入一个年份:' year
read -p '请输入一个月份:' month
a=`expr $year % 4`
b=`expr $year % 100`
c=`expr $year % 400`
if [[ month -eq 1 || month -eq 3 || month -eq 5 || month -eq 7 || month -eq 8 || month -eq 10 || month -eq 12 ]];then
echo '31天'
elif [[ month -eq 4 || month -eq 6 || month -eq 9 || month -eq 11 ]];then
echo '30天'
elif [[ month -eq 2 && a -eq 0 && b -ne 0 || c -eq 0 ]];then
echo '29天'
else
echo '28天'
fi
4、做学院评奖系统:
read -p '请输入数学成绩:' math
read -p '请输入语文成绩:' chinese
if [[ $math -ge 80 && $chinese -ge 80 ]];then
echo '奖学金500'
elif [[ $math -lt 30 && $chinese -lt 30 ]];then
echo '重修'
fi
5、输入三个数,如果其中有一个值大于1000,则提示,输入的数值有大于1000的。
read -p '请输入第一个数:' a
read -p '请输入第二个数:' b
read -p '请输入第三个数:' c
if [[ $a -gt 1000 || $b -gt 1000 || $c -gt 1000 ]];then
echo '三个数中有大于1000的数'
else
echo '没有大于1000的'
fi
6、定义一个字符,判断是否为字母。
7、定义一个整数,计算其平方值和立方值。
8、定义一个大 写字母,把它转换为小写字母后显示出来。
# 有两个选项 -l 代表小写,-u 代表大写
typeset -u name
name='asdfgh'
echo $name
typeset -l nam
nam='asdfgh'
echo $nam
9、一位学生参加了三门不同科目的考试,计算并显示所得的总分和平均分同时显示单科所得分数。
10、定义三个数a=10,b=20,c=30 a+=10;b-=4; c%=2; 输出a b c 的结果
11、定义三个数,求出其中的最大值
read -p '请输入第一个数:' a
read -p '请输入第二个数:' b
read -p '请输入第三个数:' c
if [[ $a -gt $b && $a -gt $c ]];then
max=$a
echo $max
elif [[ $b -gt $a && $b -gt $c ]];then
max=$b
echo $max
else
max=$c
echo $max
fi
12 、如果 score 值大于90,则奖励一个 Iphone 6s ,当 score 值小于等于 90 时,先判断 score 是否大于 70 ,如果 score 是介于 70–90 之间,则奖励一个红米,如果成绩小于等于 70 ,则罚做 50 个俯卧撑
read -p '请输入成绩:' score
if [[ $score -ge 90 ]];then
echo '奖励iphone 6s'
elif [[ $score -ge 70 && $score -lt 90 ]];then
echo '奖励一个红米'
else
echo '做俯卧撑'
fi
13、对一批货物征收税金(长整型)。价格在1万元及以上的货物征税5%,在5000元及以上,1万元以下的货物征税3%,在1000元及以上,5000元以下的货物征税2%,
1000元以下的货物免税。编写一程序,读入货物价格,计算并输出税金。
14、输入3个整数,将其中最小的数输出。
15、某超市为了促销,规定:购物不足50元的按原价付款,超过50不足100的按九折付款,超过100元的,超过部分按八折付款。编一程序完成超市的自动计费的工作。
16、当前小学生的成绩单由以前的百分制改为优秀、良好、合格、不合格四个等级的等级制。编一程序完成分数的自动转换工作。
转换规则如下:60分以下的为不合格;60到69分为合格;70到89分为良好;90分以上的为优秀。(提示:可以利用除法运算来使程序更简明,结合case语句)。
关于函数:
function funWithRet(){
echo 'This function will add the two number of the input...'
echo 'Enter the first number:'
read aNum
echo 'Enter the second number:'
read anotherNum
echo The two numbers are $aNum and $anotherNum
return $(($aNum+$anotherNum))
}
funWithRet
echo The sum of two numbers entered is $?!
循环的题目练习:
1、本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少?
cost1=10000
n=1
while(($n<=5));do
if [[ ${n} -le 5 ]];then
tax=`expr $cost1 / 1000 \* 3`
cost1=`expr $cost1 + $tax`
fi
n=$(($n+1))
#echo $cost1
done
echo $cost1
money=10000
for i in `seq 5`;do
m=$(echo "scale=2;$money * 0.003"|bc)
money=$(echo "$money+$m"|bc)
done
echo $money
2、计算出1—100之间所有能被3整除的整数的和?
3、找出一个数的所有因子数
4、输入一个数,判断这个数是否是素数;
5、定义一个正整数如:1205 统计它的各位数字中零的个数,并求各位数字中的最大者。
6、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
7、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
8、判断一个数是否是完全数(完数指的是一个数的所有因子数的和等于这个数本身,例如 6=1+2+3,即6就是完全数)
9、循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误(使用break N)
10、循环录入python课的学生成绩,统计分数大于等于 80分的学生比例(使用continue N)
11、有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对? 分析:兔子的规律为数列,1,1,2,3,5,8,13,21
12、打印空心菱形