Linux 系统学习——shell编程入门学习
一、介绍:
1. shell是一个作为用户和linux系统间接口的程序,允许用户向操作系统输入需要执行的命令
2、执行脚本:
1、./文件名
2、sh 文件名
3、#source 文件名
3、在shell上 # 为注释
4、每个shell程序需要写在 #!/bin/sh 开始 ,相当于头文件 ,这是对shell声明
简单书写 :
#!/bin/sh //必须要带上这个 shell 声明
A="hello" // 这里不能 A = "hello" , 带有空格的话会识别错误
echo "A is"
echo $A
注意:shell 在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第一个符号标记就是“A”,当然就不成立了,而没有空格的时候,第一个标记是A=“hello world” ,shell 将解释为变量赋值指令,因此可以通过。
5、 文件结束后缀:
Linux :\n 为回车换行
windows : \r\n 为回车换行
二、重定向 > 或 >> 解析:
以 ll > aa 为例子
> 作用是 把 ll 内容写进 aa文件里头,但是里头原来的文件内容会被删除掉
>> 作用是把 ll 内容写进 aa文件里头,但是里头原来的文件内容不会被删除掉,重新另外换行添加内容
管道 :|
ll | grep "s" // 通过管道 | ,查看 ll 下 含有 s 的内容
三、环境变量、系统变量 :
环境变量:
系统变量:
演示bb.sh:
#!/bin/sh
echo $0
echo $#
echo $1
echo $2
echo $3
四、shell 常用Linux 指令 :
以 mv 为例子 :
键盘输入功能实现 (read):
#!/bin/sh
A=10
echo $A // 先打印 A =10 值
read A //从键盘读入数据
echo $A
结果 :
五、语法结构
(1)条件判断:
if else
使用模式一:
#!/bin/sh
if test -f a.sh #如果成立就执行then
then #一定要加
echo "sucess"
else
echo "failed"
fi #一定要加结束符号
常用这种:
#!/bin/sh
if [ -f a.sh ] // 格式 [ ] 左右两边都要一个空格
then
echo "yes"
else
echo "no"
fi
注意:
使用[ ]时,必须要在 [符号和被检查的条件之间留出空格,可以把符号看作和test样,test和后面的条件之间总是有一个空格。
代码最后不要忘了写 fi 来结束这个判断
#!/bin/sh
echo "please scanf you data,answr is yes or no"
read data
if [ $data = "yes" ]
then
echo "good"
else
echo "Fuck"
fi
多重条件 如c语言中的 if () else if () else :
#!/bin/sh
if [ 10 -lt 2 ] //如果 10 小于 2 ,才打印 good
then
echo "good"
elif [ 10 -gt 5 ] // 如果 10 大于5 ,打印 well
then
echo "well"
else
echo "NO"
fi
#!/bin/sh
if [ 3 -eq 4 ]
then
echo "yes"
else
echo "no"
fi
#!/bin/sh
if [ -d b.txt ]
then
echo "yes"
else
echo "no"
fi
(2)循环判断:
1、for循环 :
#!/bin/sh
echo "please input data"
for data in 1 2 3
do
echo $data
done
2、while循环
#!/bin/sh
echo "input data"
#data=1
read data //从键盘输入data
while [ $data != 6 ] // 从键盘 输入data ,判断data 是否不等于 6
do
echo "again"
echo $data
data=$(($data+1)) // data 依次相加 ,类似于C 语言中 data++
done //循环必带 结束符
exit 0
3、until :当满足循环条件的时候,直接跳出循环。而 while 循环是满足循环条件,继续执行循环条件里面的语句
#!/bin/sh
echo "input data"
data=5
until [ $data -le 6 ]
do
echo $data
data=$(($data+1))
done
echo "跳出循环"
exit 0
跳出循环,没有执行循环里面打印 data的值
(3)选择语句(相当于c语言swich):
#!/bin/sh
echo "请输入数据"
read data
case "$data" in
yes) echo "good";; #注意一定要两个 ;; 结尾
y) echo "nice";;
no) echo "fuck";;
n) echo "shift";;
esac # 选择语句必带
exit 0
注意每个模式都以 双分号 ;; 结尾,因为你可以在前后模式之间放置多条语句,所以需要使用一个双分号来标记前一个语句的结束和后一个语句的开始
(4)函数( 直接函数名字+() 来使用 )
#!/bin/sh
foo() // 函数名字 + ()
{
echo $0 # 打印文件名字
echo $1 # 打印第一个参数
echo $2 # 打印第二个参数
}
echo $0 $1 $2
foo $1 $2 # 这里要给foo 函数 传参数 才会打印 $1 、$2
- 如果要在shell函数中声明局部变量,则要使用local关键字,局部变量的作用域则局限在函数范围内。
- 此外,函数还可访问全局作用范围内的其他shell变量。如果全局变量和局部变量出现了同名,则局部变量会覆盖全
例子:
#!/bin/sh
A="good"
foo()
{
local A="nice"
echo $A
}
echo "局部变量local作用:"
foo
echo "全局变量:"
echo $A
exit 0
(5)无限循环 指令 冒号 (:)
冒号(:)是一个空命令,它偶尔会被用于逻辑简化,相当于true的一个别名,由于它是内置命令,所以它的运行效率要比true高
while : 相当于while true
#!/bin/sh
fun()
{
while :
do
echo "gg"
done
}
fun
exit 0
(6)break 跳出循环
#!/bin/sh
A=10
B=15
while [ $A -ne $B ]
do
A=$(($A+1))
if [ $A -eq "12" ] # 当 A = 12时 跳出循环
then
echo "good"
break; # 这个 ; 可加可不加
fi
done
exit 0
(7)函数返回值 return (在shell脚本,0表示返回成功,相当于 c语言的 1)
#!/bin/sh
yes_or_no()
{
echo "is your name $*?"
while true
do
echo "please enter yes or no"
read a
case "$a" in
y|yes) return 0;; # 在shell脚本,0表示返回成功,相当于 c语言的 1
n|no) return 1;;
* ) echo "error"
esac
done
}
echo "original parameters are $*"
if yes_or_no "$A" # shell脚本编程中,注意:Linux中返回0表示成功
then # $A 用一个变量 A 来存放返回值,用其他字符也可以
echo "hi"
else
echo "never mind"
fi
exit 0
(8)continue命令(和c语言功能差不多):
#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
if [ -d "$file" ]
then
echo skipping the directory $file
continue
fi
done
echo first direcyory starting fred was $file
rm -rf fred*
(9)exec命令:
将当前的shell替换为一一个不同的程序
exec wall”hello world”
将当前的shell替换为执行wall,exec后面的语句都不会执行了,因为当前的shell已经不复存在了
代码演示 :
#!/bin/sh
echo "lulu"
exec echo "hengheng"
echo "aa"
echo "bb"
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68464.html