Linux操作系统shell编程操作(一)

1、shell 编程

1.1 shell 定义

shell 是一个命令行的解释器,接受应用程序/用户命令,然后调用操作系统内核;

shell 可以是一个比较复杂的脚本,可以用一行行的命令,从而进行复杂的流程控制操作。

Shell 还是一个功能相当强大的编程语言,易于编写、易于调试、灵活性强。
在这里插入图片描述

查看Bash 命令支持的编译器
cat  /etc/shells 


查看默认的shell 编译器是什么
echo $SHELL 

1.2 shell编程入门操作

#!/bin/sh

1.2.1 执行操作

bash 或者 sh +文件名从而进行执行操作
bash hello.sh 
sh hello.sh 
脚本的相对路径或者相对路径进行操作
如果直接不能够执行的话,那么我们需要对文件进行执行权限的的授权
chmod u+x ./scripts/hello.sh

然后采用相对路径或者绝对路径进行执行
./scripts/hello.sh
. 或者source 直接进行文件的执行操作
. hello.sh 
source hello.sh 

1.2.2 父子shell

ps -f  查看shell的个数
bash 新开一个shell操作
exit 退出子shell

1.3 变量

系统变量和自定义变量或者全局变量和局部变量操作、

1.3.1 系统变量

H O M E 、 HOME 、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER

echo $USER

env | less
printenv | less
set | less

printenv USER

env | grep my_variable
set | grep my_variable

撤销操作
unset my_variable 

1.3.2 用户自定义变量

  • 输出的时候必须$
  • 赋值的时候没有空格
  • “ ” 或者’ ’ 进行字符串的操作 (单引号只会原封不动的进行输出,但是双引号会当成变量进行输出操作)
  • 小写操作
  • readonly 定义只读变量
  • 默认的都是字符串类型,无法直接进行数值计算操作

export my_varibale 将自定义变量转换成为全局变量,但是在子shell中进行修改,但是不影响父shell中的值

1.3.3 参数信息–特殊的变量

参数处理说明
$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
  • $0,$1-9 位置参数
  • $# 获取所有输入的参数的个数信息
  • $* 把所有的输入当成一个一个参数信息
  • $@ 可以采用循环进行访问

1.4 运算符操作

$[a+2]
$((a+2))
直接在shell中进行操作的话,会当成命令,那么会发生错误,但是可以采用 
echo $[5+2]

expr 5 + 2
expr 5 - 2
expr 5 \* 2 

add.sh
#!/bin/sh
s = $[$1+$2]
echo s= $s

1.5 条件表达式

$? 获取上一条语句的返回结果

  • [ ]必须要空格操作
test condition

判断是不是相等和不相等操作
[ $a != Hello ]
echo $? 

在这里插入图片描述

[ $a -lt 20 ]&& echo "$a <20" || echo "$a >=20"

1.6 流程控制操作

菜鸟教程:shell 流程控制操作

if else 的 […] 判断语句中大于使用 -gt,小于使用 -lt

如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 ><

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:https://www.runoob.com/linux/linux-comm-let.html

1.6.1 if else

# 第一种情况
if condition
then
    command1 
    command2
    ...
    commandN 
fi
# 第二种情况
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

# 第三种情况操作
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi


if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

1.6.2 for循环语句操作

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

for var in item1 item2 ... itemN; do command1; command2… done;

# 例子操作信息如下:
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

1.6.3 while 语句操作

while condition
do
    command
done
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done 

1.7 shell 函数操作

  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

    #!/bin/bash
    # author:菜鸟教程
    # url:www.runoob.com
    
    demoFun(){
        echo "这是我的第一个 shell 函数!"
    }
    echo "-----函数开始执行-----"
    demoFun
    echo "-----函数执行完毕-----"
    
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值