大家好,又见面了,我是你们的朋友全栈君。
shell基础
(一)shell介绍 (二)shell语法 (三)变量 (四)输入输出 (五)分支语句
- if
- case
(六)流程控制
- while
- for
- until
(七)数组 (八)函数
(一)shell介绍
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 优点:擅长文件处理,操作系统管理,实现批量的操作 解释性语言,移植性好 缺点:执行效率低,不擅长数据计算和数据处理
(二)shell注意点
#!/bin/bash #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。 #代表注释 ,!代表不是注释
author:XXX created Time:脚本的创建的时间 modify Time:修改脚本时间 Script description:该脚本的作用
查看支持的shell的类型: cat /etc/shells /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash
编写的流程:
- vi XXX.sh
- chmod x XXX.sh
- sh XXX.sh或者./XXX.sh
shell中的的特殊符号的含义: ~:家目录 !:上一条命令 $:取变量内容符号 &:后台执行的 *:通配符 ?:匹配 单个字符 ;:多条命令分割 单引号:不能解释变量,能够进行将命令进行执行
(三)变量
自定义变量
代码语言:javascript复制a=10 不加空格
echo $a
str="this is a string" 不加空格
echo $str
只读变量
代码语言:javascript复制readonly myUrl
myUrl="https://www.runoob.com"
环境变量
代码语言:javascript复制echo $PATH # 环境变量
echo $PWD # 当前的路径
echo $HOME # 当前用户的家目录
echo $0 # 当前执行脚本的名称
位置变量
代码语言:javascript复制echo $0 # 当前执行脚本的名称
echo $1 # 第1个的参数
echo $2 # 第2个的参数
echo $3 # 第3个的参数
echo $4 # 第4个的参数
echo $# # 参数的个数
echo $? # 上一条命令执行的结果
echo $$ # 当前脚本的PID号
字符串(双引号)
字符串的拼接 str=“this is a string” join_str=“name {str}” echo join_str
(四)输入输出
代码语言:javascript复制read a
read b
echo a = $a
echo b = $b
运行时,输入一个数后需要回车,再输入另一个数
原因:read 一次读取一行
“”(双引号):打印字符串,遇到 变 量 则 打 印 变 量 中 的 值 ′ ′ ( 单 引 号 ) : 打 印 字 符 串 , 遇 到 变量则打印变量中的值 ”(单引号):打印字符串,遇到 变量则打印变量中的值′′(单引号):打印字符串,遇到变量依然打印$变量 “:将中间的字符串按照命令打印
代码语言:javascript复制a=10
b=20
sum=`expr $a $b` 中间需要加空格
echo $sum
总结:计算器的实现
代码语言:javascript复制#!/bin/bash
#author:4518
#created time:0105
echo --------shell脚本实现计算器-------------
echo "请分别输入2个数"
read num1
read num2
echo ------相加结果如下----------------------
val=`expr $num1 $num2`
echo $val
echo ------相减结果如下----------------------
val=`expr $num1 - $num2`
echo $val
echo ------相乘结果如下----------------------
val=`expr $num1 * $num2`
echo $val
echo ------相除结果如下----------------------
val=`expr $num1 / $num2`
echo $val
echo ------取余结果如下----------------------
val=`expr $num1 % $num2`
echo $val
(五)分支语句
(1)常用的判断语句: test -eq 相等 -ne 不相等 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 例如:判断2个数的大小
代码语言:javascript复制echo ------判断语句---------------
read num1
read num2
if [ $num1 -gt $num2 ]
then
echo "max num is num1:$num1"
else
echo "max num is num1:$num2"
fi
判断输入的成绩
代码语言:javascript复制echo ------输入成绩,判断等级--------
read grade
if [ $grade -ge 0 ] && [ $grade -le 100 ]
then
echo "输入的成绩为:$grade"
if [ $grade -ge 0 ] && [ $grade -le 59 ]
then
echo "不及格"
fi
if [ $grade -ge 60 ] && [ $grade -le 69 ]
then
echo "及格"
fi
if [ $grade -ge 70 ] && [ $grade -le 79 ]
then
echo "良好"
fi
if [ $grade -ge 80 ] && [ $grade -le 89 ]
then
echo "中等"
fi
if [ $grade -ge 90 ] && [ $grade -le 100 ]
then
echo "优秀"
fi
else
echo "输入的成绩错误"
fi
(二)判断文件的类型 test -b 块设备文件 -c 字符设备文件 -d 目录文件 -f 普通文件 -L 链接文件 -S 套接字文件 -p 管道文件
代码语言:javascript复制echo -----判断文件的类型-------------
read filename
if [ ! -e $filename ]
then
echo "文件不存在"
else
echo "文件存在"
if [ -d $filename ]
then
echo "目录文件"
fi
if [ -f $filename ]
then
echo "普通文件"
fi
fi
(三)case语句
代码语言:javascript复制#!/bin/bash
# author:4518
# created time:0105
echo ----case实现成绩分等级------------
read grade
rank=`expr $grade / 10`
echo $rank
case $rank in # 需要保证rank和下面的数字选项相等
10) echo "优秀"
;;
9) echo "优秀"
;;
8) echo "中等"
;;
7) echo "良好"
;;
6) echo "及格"
;;
4) echo "不及格"
;;
3) echo "不及格"
;;
2) echo "不及格"
;;
1) echo "不及格"
;;
0) echo "不及格"
;;
*) echo "输入错误"
;;
esac
(六)流程控制
while
代码语言:javascript复制i=0
sum=0
while [ $i -le 100 ]
do
sum=`expr $sum $i`
i=`expr $i 1`
done
until
代码语言:javascript复制until [ $i -gt 100 ]
do
sum=`expr $sum $i`
i=`expr $i 1`
done
echo "i = $i, sum = $sum"
for
代码语言:javascript复制i=0
sum=0
#for i in {1..100} 第一种
#for ((i = 0; i < 101; i )) 第二种
for i in `seq 100` 第三种
do
sum=`expr $sum $i`
done
echo "i = $i, sum = $sum"
(七)数组
代码语言:javascript复制#!/bin/bash
# author:4518
array=("A1" "B1" "C1" "D1" "E1" "F1" "G11" "YYY")
i=0
while [ $i -lt ${#array[*]} ]
do
echo "数组的第`expr $i 1`个元素为${array[$i]}"
i=`expr $i 1`
done
echo "数组的所有的元素为: ${array[*]}"
echo "数组的长度为:${#array[*]}"
(八)函数
函数的返回值是里面打印的东西 例如:
代码语言:javascript复制read num1
read num2
add()
{
sum=0
sum=`expr $1 $2`
echo hello world
echo how are you
echo ni hao
return 80
}
ret=`add $num1 $num2`
echo "$?" 结果为80
echo "$ret" 结果为hello world,how are you
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYHVzOI2-1641389080704)(en-resource://database/1422:0)] 例子2:利用函数的方法进行2个数求和
代码语言:javascript复制read num1
read num2
add()
{
val=`expr $num1 $num2`
echo $val
}
echo -----函数调用如下------------------
ret=`add $num1 $num2`
echo $ret
(九)
遇到的问题总结: root@linux:/mnt/hgfs/gittree_project/shell# sh array.sh array.sh: 3: Syntax error: “(” unexpected 解决办法: root@linux:/mnt/hgfs/gittree_project/shell# bash array.sh 数组的第1个元素为A1 数组的第2个元素为B1 结果执行成功
(十)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168444.html原文链接:https://javaforall.cn