概述
1、虚拟机中shell是什么?有什么作用?
概念:
shell是用户和Linux内核之间的接口程序,是内核的外层,shell作为操作系统的外层,为用户提供操作系统的接口。目前常用的shell 为bash 。shell是解释执行的脚本语言(脚本语言即不用编译就可以执行的语言),在shell 中可以调用Linux系统命令。
shell是一个命令语言解释器,有自己的内建命令解释集,用户在提示符后输入的命令都有shell先解释再传给Linux内核。
作用:
shell最强大的特性即其自身为一种非类型的解释型的程序设计语言。支持函数,变量,数组,程序控制结构等高级语言中能见到的程序元素。
任何在提示符下能键入的命令都可放到可执行的shell程序中,即shell可简单重复的执行某一任务。
Linux默认的shell为bash,具有命令补全,命令编辑,命令历史表等功能,以及灵活和强大的编程接口,同时又有友好的用户界面。
用户成功登陆时,系统将执行一个shell程序。shell为普通用户提供$命令行提示符,超级管理员为#命令行提示符。
2.Shell脚本及运行
使用shell写的程序通常也称为脚本。脚本是由各种变量、表达式、命令等通过一定的逻辑组装而成的,具有顺序解释执行的特性。
#!/bin/bash # 脚本必须以#! 开始
#! 表示:/bin/bash将执行该脚本文件中的程序
# 表示此后的字符串为注释
终端创建脚本文件:vi first.sh
按按键I进行程序编写
编辑完成后按ESC退出编辑状态,按:,再输入wq返回终端
<终端命令>
建立 first.sh 脚本
[root@localhost 801]# vi first.sh
设置执行权限
[root@localhost 801]# chmod u+x first.sh
执行脚本
[root@localhost 801]# ./first.sh
hello wolcome to linux world
today is:2019年 07月 29日 星期一 20:15:39 CST
执行脚本
[root@localhost 801]# sh first.sh
hello wolcome to linux world
today is:2019年 07月 29日 星期一 20:23:48 CST
[root@localhost 801]# bash first.sh
hello wolcome to linux world
today is:2019年 07月 29日 星期一 20:23:58 CST
<first.sh>
指明系统需要的shell
#!/bin/bash
echo "hello wolcome to linux world"
echo "today is:$(date)"
+x:赋予脚本执行权限
u+x:用解释器解释执行
3、变量 #变量名约定大写(此处暂以小写,不做严谨要求)
定义本地变量/临时变量
[root@localhost 801]# a=10
查询变量值
[root@localhost 801]# echo $a
10
查询变量
[root@localhost 801]# echo a
A
取消变量
[root@localhost 801]# unset a
[root@localhost 801]# echo $a
定义环境变量(2种方法)
[root@localhost 801]# export yy=10
[root@localhost 801]# declare -x zz=10
查看所有变量
[root@localhost 801]# set
查看所有环境变量(2种方法)
[root@localhost 801]# env
[root@localhost 801]# export
取消变量
[root@localhost 801]# declare +x zz
定义字符串变量
[root@localhost 801]# your_name="yu"
查看字符串变量值
[root@localhost 801]# echo $your_name
yu
取消字符串变量
[root@localhost 801]# unset your_name
[root@localhost 801]# echo $your_name
定义字符变量
[root@localhost 801]# your_name='aaaa'
定义字符数组变量
[root@localhost 801]# arry_name[0]=value0
[root@localhost 801]# arry_name[1]=value1
查看字符数组值
[root@localhost 801]# echo ${arry_name[@]}
value0 value1
单引号和双引号的区别
[root@localhost 801]# echo "Oh$SA$SA"
Ohhello Linuxhello Linux
[root@localhost 801]# echo 'Oh$SA$SA'
Oh$SA$SA
常用的Shell预定义变量如下。
$#:位置参数的数量。
$*:所有位置参数的内容。
$?:命令执行后返回的状态。
$$:当前进程的进程号。
$!:后台运行的最后一个进程号。
$0:当前执行的进程名。
4、shell变量表达式
shell中的测试语句主要用各种测试语句、条件来获取字符串、文件、数字所处的状态。
此处暂简介数字比较。
变量赋值
[root@localhost 801]# aa=100
[root@localhost 801]# bb=200
比较数字是否相等,1为否,0为是
[root@localhost 801]# test $aa -eq $bb
[root@localhost 801]# echo $?
1
比较数字是否小于,1为否,0为是
[root@localhost 801]# test $aa -lt $bb
[root@localhost 801]# echo $?
0
比较数字是否大于,1为否,0为是
[root@localhost 801]# test $aa -gt $bb
[root@localhost 801]# echo $?
1
比较数字是否大于等于,1为否,0为是
[root@localhost 801]# test $aa -ge $bb
[root@localhost 801]# echo $?
1
比较数字是否小于等于,1为否,0为是
[root@localhost 801]# test $aa -le $bb
[root@localhost 801]# echo $?
0
比较数字是否不相等,1为否,0为是
[root@localhost 801]# test $aa -ne $bb
[root@localhost 801]# echo $?
0
5、shell脚本流程控制-分支语句if case
#! 表示:/bin/bash将执行该脚本文件中的程序
#!/bin/bash
#set -x #表示此后的字符串为注释
read -p "please input your age:" age
if [ "$age" -le 0 ] || [ "$age" -ge 150 ];then
echo "sorry,please enter the right age"
elif [ "$age" -gt 0 ] && [ "$age" -lt 20 ];then
echo "hello child"
elif [ "$age" -ge 20 ] && [ "$age" -lt 50 ];then
echo "hello younger"
else
echo "hello oldman"
fi
执行程序:
[root@localhost 801]# chmod +x iftest.sh
[root@localhost 801]# ./iftest.sh
please input your age:16
hello child
注意:[ 条件 ]中,条件前后必须留有一个空格
[];then连在一起写,必须加上分号;
#!/bin/bash
echo -n "input a="
read a
case $a in
1) echo "select 11";;
2) echo "select 22";;
*) echo "select else";;
esac
终端命令执行
[root@localhost 801]# gedit casetest.sh
[root@localhost 801]# chmod +x casetest.sh
[root@localhost 801]# ./casetest.sh
input a=1
select 11
[root@localhost 801]# ./casetest.sh
input a=2
select 22
[root@localhost 801]# ./casetest.sh
input a=5
select else
6、shell脚本流程控制-循环控制语句for while until
程序:
#!/bin/bash
sum=0
for((i=1;i<101;i=i+1))
do
let sum=sum+$i
done
echo $sum
终端执行命令:
[root@localhost 801]# gedit fortest.sh
[root@localhost 801]# chmod +x fortest.sh
[root@localhost 801]# ./fortest.sh
5050
程序:
#!/bin/bash
k=1
sum=0
while [ $k -le 100 ]
do
let sum=$sum+$k
let k++
done
echo $sum
终端执行命令:
[root@localhost 801]# gedit whiletest.sh
[root@localhost 801]# chmod +x whiletest.sh
[root@localhost 801]# ./whiletest.sh
5050
程序:
#!/bin/bash
sum=0
while [ "$sum" -lt 10 ]
do
let sum+=1;
echo $sum
done
终端执行命令:
[root@localhost 801]# gedit whiletest1.sh
[root@localhost 801]# chmod +x whiletest1.sh
[root@localhost 801]# ./whiletest1.sh
1
2
3
4
5
6
7
8
9
10
程序:
#!/bin/bash
k=1
sum=0
until [ $k -gt 100 ]
do
let sum=$sum+$k
let k++
done
echo $sum
终端执行命令:
[root@localhost 801]# gedit untiltest.sh
[root@localhost 801]# chmod +x untiltest.sh
[root@localhost 801]# ./untiltest.sh
5050
7、shell脚本流程控制-函数
[1]函数必须先声明,才能调用
[2]函数中的变量同全局变量名相同时,则
使用 local val=value
程序:
#!/bin/bash
funtest()
{
echo "1 num is:$1 !"
echo "2 num is:$2 !"
echo "3 num is:$3 !"
}
funtest a b c
终端执行命令:
[root@localhost 801]# gedit funtest.sh
[root@localhost 801]# chmod +x funtest.sh
[root@localhost 801]# ./funtest.sh
1 num is:a !
2 num is:b !
3 num is:c !
扩展部分:
显示当前用户
[root@localhost 801]# whoami
root
查看系统中存在的shells文件
[root@localhost 801]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
查看日历和日期
[root@localhost 801]# cal;date
七月 2019
日 一 二 三 四 五 六
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
2019年 07月 29日 星期一 22:24:02 CST
程序:
#!/bin/bash
echo "the one num is = $1"
echo "the two num is = $2"
echo "the three num is = $3"
echo "the foure num is = $4"
echo "the five num is = $5"
echo "the sum of the number is $#", "they are $*"
终端执行命令:执行脚本时参数再传入
[root@localhost 801]# gedit xx.sh
[root@localhost 801]# chmod +x xx.sh
[root@localhost 801]# ./xx.sh 1 2 3 4 5
the one num is = 1
the two num is = 2
the three num is = 3
the foure num is = 4
the five num is = 5
the sum of the number is 5, they are 1 2 3 4 5
程序:
#!/bin/bash
a=5
b=6
result=$[a + b]
echo "result=$result"
终端执行命令:
[root@localhost 801]# gedit result.sh
[root@localhost 801]# ./result.sh
result=11
程序:
#!/bin/bash
echo "please input your name:"
read name
echo "welcome $name"
终端执行命令:
[root@localhost 801]# gedit readtest.sh
[root@localhost 801]# chmod +x readtest.sh
[root@localhost 801]# ./readtest.sh
please input your name:
xiaowen
welcome xiaowen
程序:
#!/bin/bash
grep -q ^$1 /etc/passwd
if [ "$?" -eq 0 ];then
echo "$1 have"
else
echo "$1 not have"
Fi
终端执行命令:
[root@localhost 801]# gedit ss.sh
[root@localhost 801]# chmod +x ss.sh
[root@localhost 801]# ./ss.sh
have
最后
以上就是英俊盼望为你收集整理的Linux中shell编程-学习笔记(一)的全部内容,希望文章能够帮你解决Linux中shell编程-学习笔记(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复