Shell编程---------初学者入门
1、shell是一个解释型的脚本语言,是基于linux内核的一个外层保护工具 负责完成用户和内核间的交互。常见的解释型的语言:python perl go lua
2、查看当前系统所支持的shell的类型:cat /etc/shells
3、shell 的规则
① 新建一个shell脚本: vim xxx.sh
② 运行环境设置:在shell脚本的第一行 要设置shell的类型: # !/bin/bash
③ shell的注释:
单行注释:在要注释的那一行的前边加上 #
多行注释:
:<< 标识 这个标识可以自己定义一个单词
标识
#!/bin/bash # 井与感叹号之间有一个空格echo "hello" # 只要在终端里可以执行的命令,在这里都可以使用
# echo "nihao!"
:<< iscat ./test.shecho "world"cat ./test.sh
isecho "space"
4、脚本的执行
第一种:
直接用 ./ 脚本的名字
这种执行要求脚本文件必须有可执行权限
假如没有可执行权限 要加上一个可执行权限,然后再执行
第二种:
bash 脚本的名字
这一种脚本文件没有可执行权限 也能执行
5、shell的变量
① shell里变量是没有类型之分的 直接定义即可。在使用的时候 在变量名字之前加上$
tmp = 10
echo $tmp
② shell变量的分类
普通变量:
tmp = 10
echo $tmp
#!/bin/bashecho "hello"tmp=10echo $tmp #结果为hello 10
特殊变量:
$* $@:脚本的所有的参数
$#:传给脚本的参数的个数
$0:脚本本身
$1:脚本的第一个参数
$?:上一条命令的执行结果 0表示成功 1表示失败
程序 | 运行结果 |
![]() |
|
环境变量:由系统维护,用于设置系统的shell工作环境,极少数用户可以修改
PATH:指定当前命令寻找的路径
QTDIR:qt安装路径
USER:当前用户
SHELL:shell类型
HOSTNAME:当前主机名
LD_LIBRARY_PATH:查找库文件所在的路径
假如修改了一个环境变量,并且让他永久有效,就需要将环境变量相关的内容 放到/etc/profile文件里 (查看这个文件:vim /etc/profile)
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH(设置动态库路径,这样就不用将动态库复制到usr/lib里了)
在/etc/profile文件的最下边加上环境变量的一句话:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ldw/
执行souce命令 生效配置:source /etc/profile
③ shell变量的声明
变量声明:变量的名字=变量的值(等号两边不允许有空格)
变量取消定义:unset 变量名
变量的引用:$变量名、${变量名}
6、shell的运算符
算术运算符
第一种:var=$((1+1))
第二种:var=$[1+2]
第三种:let var=1+3 (如果在notepad++上面编辑,需要在此编辑器右下角切换为Unix(LF)模式)
第四种:var=$(expr 1 + 4) 运算符的后边要加上空格(加号后面要有一个空格)
# !/bin/bash
var=$((1+1))echo $var
var=$[1+2]echo $var
let var=1+3 echo $var
var=$(expr 1 + 4)echo $var
条件测试语句
test 表达式1 = 表达式2 等号两边须有空格
test string1 == string2 条件表达式值为真返回0,为假返回非0
echo $? 非0为假,0为真
算术比较运算符
gt:大于
lt:小于
eq:等于
ge:大于等于
le:小于等于
ne:不等于
如: [ 1 -lt 10 ] 1小于10 (数字左右都要有空格,否则报错)
判断表达式
-a 要求两个条件都满足 and
-o 两个条件有一个满足即可 or
[ 1 -gt 10 -a 2 -lt 10 ] 与
[ 1 -gt 10 -o 2 -lt 10 ] 或
#!/bin/bash
tmp="hell"
test $tmp = "hello"
echo $?[ 9 -gt 7 ]
echo $?[ 7 -gt 3 -a 11 -lt 10 ]
echo $?[ 1 -gt 3 -o 11 -lt 10 ]
echo $?
#结果为:1 0 1 1
字符串的比较
[[ -z $str ]]
假如字符串的长度为0 则返回0
[[ $str1 == $str2 ]] 判断两个字符串是否相等
[[ $str1 != $str2 ]] 判断两个字符串是否不相等
#!/bin/bash
str1="hello"
str2="world"
[[ -z $str1 ]]echo $?
[[ $str1 == $str2 ]]echo $?
[[ $str1 != $str2 ]]echo $?
#结果为:1 1 0
7、shell流程控制语句
if else语句
if [ 条件 1 ]
then
做一些动作
elif [ 条件2 ]
then
做一些动作
else
命令
fi
#!/bin/bash
var1=$1 #类似主函数传参:$1是第一个参数;$2是第二个参数
var2=$2
if [ $var1 -gt $var2 ]
thenecho $var1
elif [ $var1 -lt $var2 ]
thenecho $var2
elseecho "com"
fi
case语句
case $变量名 in
"1")
命令1
;;
"2" )
命令 2
;;
*)
命令 3
;;
esac
#!/bin/bash
echo "请输入一个数字:"
read a; # 从标准输入里面读取内容给变量 a
case $a in # a 的各种情况"1") # 当a为1时,输出:你好 echo "你好";;"2")echo "hello world";;*)echo "输入无效";;
esac
for语句
形式一
for x in 列表
do
命令1
done
#!/bin/bashfor i in 1 2 3 4 5 6doecho $idone
#输出:1 2 3 4 5 6
形式二
for((i=0;i<5;i++))
do
echo $i
done
#!/bin/bash
for((i=0;i<5;i++))
doecho $i
done
#输出:0 1 2 3 4
while语句
形式一
while [ 循环条件 ]
do
命令1
done
#!/bin/bash
a=0
while [ $a -lt 10 ]
doecho $aa=$(($a+1))
done
#输出:0 1 2 3 4 5 6 7 8 9
形式二:
while((循环条件))
do
命令1
done
#!/bin/bash
i=0
while(($i < 10))
doecho $ii=$(($i+1))
done
#输出:0 1 2 3 4 5 6 7 8 9
until语句
形式一
until [ 结束的条件 ]
do
命令1
done
#!/bin/bash
i=0
until [ $i -gt 10 ]
doecho $ii=$(($i+1))
done
#输出;0 1 2 3 4 5 6 7 8 9 10
形式二:
until((结束的条件))
do
命令1
done
#!/bin/bash
i=0
until(($i>10))
doecho $ii=$(($i+1))
done
#输出:0 1 2 3 4 5 6 7 8 9 10
8、shell数组
数组的定义
形式一:a=(1 2 3 4 5 6)
形式二:a[0]=1;a[1]=2;a[2]=3;
形式三:a=([0]=1 [1]=2 [2]=3)
数组的引用
取某个数组元素的值:${a[1]}:取数组里第二个元素的值
取数组里的所有的值:${a[@]}
取数组的长度:${#a[@]}
截取下标为2以后的所有的元素:${a[@]:2}
截取下标为2以后的两个元素:${a[@]:2:2}
#!/bin/bash
a=(1 2 3 4 5)
echo "all:${a[@]}"
echo "第一个成员${a[0]}"
echo "数组的长度:${#a[@]}"
echo "数组下标为2以后的所有的元素:${a[@]:2}"
echo "数组下标为2以后的两个元素:${a[@]:2:2}"
#输出:
#all:1 2 3 4 5
#第一个成员1
#数组的长度:5
#数组下标为2以后的所有的元素:3 4 5
#数组下标为2以后的两个元素:3 4
9、shell函数
特点:
无返回值
无参数
仅仅用来封装代码 调用的时候直接写函数名即可
#!/bin/bash
function add()
{return $(( $1+$2))
}echo "请输入一个数字"
read a #把读取到的数字给a
echo "请再输入一个数字"
read b #把读取到的数字给badd a b #调用函数,传参
echo $? #输出返回值
#如果输入2,3 则输出5
附:小项目
#!/bin/bash #实现判断闰年和非闰年read year
NUM=`expr $year % 4`
NUM2=`expr $year % 100`
NUM3=`expr $year % 400`if test $NUM -eq 0 -a $NUM2 -ne 0 -o $NUM3 -eq 0
thenecho "$year 是闰年!"
elseecho "$year 不是闰年!"
fi
#!/bin/bash #实现一个简单的计算器read a b ccase $b in"+")echo "$a + $c = $(expr $a + $c)";;
"-")echo "$a - $c = $(expr $a - $c)";;
"*")echo "$a * $c = $(expr $a \* $c)";;
"/")echo "$a / $c = $(expr $a / $c)";;esac
Shell编程---------初学者入门相关推荐
- JavaScript_牛客网_编程初学者入门训练(21-30题解)
牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第21-30题解答(js) 22.你能活多少秒 25.计算体重指数 26.计算三角形的周长和面积 27.计算球体体积 28.大小 ...
- java编程题身高排队_编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身...
编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身 编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身高(米).(C的没什么问题,试着用Java写一下,Java的Scanner ...
- Shell编程从入门到入土
1. Shell 编程的作用 将一些复杂的命令简单化(平时我们提交一次github代码可能需要很多步骤,但是可以用Shell简化成一步) 可以写一些脚本自动实现一个工程中自动更换最新的sdk(库) 自 ...
- 牛客网 编程初学者入门训练 BC133 KiKi说祝福语
题目来源:牛客网 编程初学者入门训练 BC133 KiKi说祝福语 import java.util.Scanner; public class Main {public static void ma ...
- JavaScript_牛客网_编程初学者入门训练(131-140题解)
牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第131-140题解答(js) 131.KiKi学程序设计基础 132.KiKi算期末成绩 133.KiKi说祝福语 134.K ...
- 「Linux」Linux Shell 编程基础入门
Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...
- 区块链编程初学者入门指南
我有很多问题需要了解区块链Blockchain的工作原理.重要的是"我如何在其上构建应用程序dapp?".花了几个星期的时间挖掘,阅读和试验才最终了解.我找不到简短而全面的指南.现 ...
- 牛客网 编程初学者入门训练 BC37 网购 Java
题目来源:牛客网 编程初学者入门训练 BC37 网购 import java.util.Scanner; public class Main {public static void main(Stri ...
- 牛客网 编程初学者入门训练 BC3 有容乃大 Java
题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...
最新文章
- 20145222黄亚奇《Java程序设计》第1周学习总结
- html台风路径,常用气象网站功能简介
- 把一个一维数组转换为in ()
- Some Essential JavaScript Questions And Answers(5)
- MySQL修改字符集
- 【HDU - 5918 】Sequence I (数组(字符串)匹配问题,可选KMP)
- 1.0Tensorflow中出现编译问题的解决方案
- (进阶)LeetCode(258)——各位相加(JavaScript)
- 如何自动维护全文索引和目录
- 添加谷歌账户显示与服务器,解决添加google同步帐户出错竟然可以这般简单!
- arcgis中给属性文件加x y坐标
- powerbi嵌入到HTML5,如何把Power BI嵌入到Web应用中
- sonar代码审查问题分析
- STL 容器详解——string 类
- Android正方教务系统课程表+查成绩+查考试安排
- 大学计算机基础导论备考
- HP LaserJet 1010 打印机 - 在 Win 7 下安装驱动
- 白嫖 IObit 系列软件例如 IObit Uninstaller
- MACD指标5种背离分析(图解)
- 鸿蒙系统照样没有谷歌服务,曝华为Mate40 Pro+升级鸿蒙2.0系统 谷歌服务照样能用...
热门文章
- 文本编辑器的简单实现(附源代码)
- Cadence Allegro导入DXF文件图文教程及视频演示
- 网关测试报告—以部标JT808为例
- 万兆网SFP/SFP+设计
- windows 蓝牙程序开发 ble低功耗蓝牙
- 使用ZeroMemory、memset对结构体、数组的初始化
- 【又做了个视频......】到底什么是5G LAN?
- 鸟音消澡声不求人:音频录制编辑软件COOL EDIT 教
- pytorch scatter和scatter_详解
- 2022年油分散剂市场前景分析及研究报告