Shell编程基础

一、什么是shell

GUI提供了一种图像化的借口

1、查看当前shell

[user@bogon ~]$ echo $SHELL
/bin/bash
[user@bogon ~]$ ls -l /bin/bash
-rwxr-xr-x. 1 root root 964536 4月   1 2020 /bin/bash

2、搭建运营环境

(1)第一种方法是确保我们执行的命令具有可执行权限,然后直接键入该命令执行它:

$ chmod +x /path/to/test.sh
$ /path/to/test.sh

(2)直接把脚本作为 Bash 解释器的参数传入:

$ bash /path/to/test.sh
或
$ source /path/to/test.sh
或
$ . /path/to/test.sh

二、基本语法

运行第一个程序Hello,World

方法1:使用chmod命令

[user@bogon ~]$ vim  test.sh
[user@bogon ~]$ chmod +x test.sh 
[user@bogon ~]$ ./test.sh 
Hello,world

方法2:直接使用 bash 目录/文件名

[user@bogon ~]$ bash ./test.sh 
Hello,world
[user@bogon ~]$ 

三、变量

1、变量的分类

1.用户自定义变量
由用户自定义、修改和使用
2. shell 环境变量
由系统维护,用于设置用户的shell工作环境
只有少数的变量用户可以修改其值
3. 位置参数变量(positional parameters)
通过命令给程序传递执行参数
可以用shift命令实现位置参数的迁移
4. 专用参数变量 (special parameters)
bash 预定义的特殊变量
用户不能修改其值

(1)定义变量

  • variable=value
  • variable=‘value’
  • variable=“value”
    注意
    如果value不包含任何空白字符,就可以不使用引号
    如果有必须使用引号
    赋值**=**的周围一定没有等号

(2)shell 变量的命名规范

  • 变量名由数字、字母、下划线组成
  • 必须以字母或者下划线开头
  • 不能使用shell里的关键字
    定义变量的示例:
#! /bin/bash
url=http://c.baincheng.net//shell
echo $url
name='R语言中国网'
echo $name
author="hahha"
echo $author

(3)使用变量

author="haha"
echo $author
echo ${author}

注意:花括号{ }是可选的加不加都可以,家的话是未来帮助解释器识别变量
例子:

skill="ptthon"
echo "I my godda at ${kill}"

如果不给skil 变量花“,写echo I am good at $skillScriot ”,解释器就回把当前的变量(其值为空)

(4)修改变量的值

就是重新使用变量赋值就是变量名字+赋值内容
第二次赋值时不能在变两面前加$

(5) 单引号和双引号的区别

  • 单引号:引号中是什么就原样输出
  • 双引号:输出时先解析里面的变量,建议使用双引号

(6)将命令结果赋值给变量

  • variable=command
  • variable=$(command)
    示例:
[root@xueai8 shell]# log=$(cat test.sh)
[root@xueai8 shell]# echo $log
echo -e "hello \n world!" url="1233445566" echo ${url:2:9} echo ${url%33*} i=10; ((i++)) echo $i
[root@xueai8 shell]# log =`cat test.sh`
-bash: log: 未找到命令
[root@xueai8 shell]# log=`cat test.sh`
[root@xueai8 shell]# echo

[root@xueai8 shell]# echo $log
echo -e "hello \n world!" url="1233445566" echo ${url:2:9} echo ${url%33*} i=10; ((i++)) echo $i
[root@xueai8 shell]#

四、内部变量

  1. $#:传送给shell程序的位置参数的数量
  2. $?:最后命令完成码或在shell程序内执行shell程序(返回值)
  3. $0:shell程序的名称
  4. $*:调用shell 程序时所传送的全部参数的单字字符
  5. $@:“参数1”,“参数2”……形式保存的参数
  6. $n:第n个参数
  7. $$ :本程序的pid
  8. $!:上一个命令的pid
    示例:
echo "当前程序的名字是$0"
echo "一共输入$#个参数,全部参数是$@,第一个参数是$1"
echo "当前进程pid是$$"
echo "执行完毕,返回$?"

测试:

[root@xueai8 shell]# cat hello.sh
echo "当前程序的名字是$0"
echo "一共输入$#个参数,全部参数是$@,第一个参数是$1"
echo "当前进程pid是$$"
echo "执行完毕,返回$?"

[root@xueai8 shell]# sh hello.sh hello world ok
当前程序的名字是hello.sh
一共输入3个参数,全部参数是hello world ok,第一个参数是hello
当前进程pid是42291
执行完毕,返回0

五、字符串的长度

语法实现: == ${#string_name}==其中string_name 为字符串的名字
示例;


#! /bin/bash

str="hello world!"
echo ${#str}

#位置参数长度
n=$1
echo ${#n}
echo ${#1}

测试:

[root@xueai8 shell]# sh demo4.sh hahhahhahahh
12
12
12

六、字符串的拼接

将两个字符串并排放在一起就能实现拼接
示例:

#! /bin/bash
name="shell"
url="www.baidu.com"
str1=$name$url #中间不能有空格
str2="$name   $url" #双引号中间可以有引号
str3=$name":"$url #中间可以出现其它字符
str4="$name:$url"
str5="${name}script:${url}index.html"
echo $str1
echo $str2
echo $str3
echo $str3
echo $str4
echo $str5

测试:

[root@xueai8 shell]# sh demo5.sh
shellwww.baidu.com
shell www.baidu.com
shell:www.baidu.com
shell:www.baidu.com
shell:www.baidu.com
shellscript:www.baidu.comindex.html
[root@xueai8 shell]#

七、字符串的截取 (和其他编程一样下标从0开始)

格式说明
${string:start:length}从string字符串的左边第start个字符串开始,向右边截取length个字符
${string : start}从string字符串的左边第start字符开始截取 ,直到最后
${string : 0-start : length}从string字符串右边第start字符开始,向右截取length个字符
${string:0-start}从右边第start字符开始截取,知道最后
${string#*chars}字符串第一次出现chars的位置开始,截取chars右边的所有字符
${string##*chars}从字符串最后一次出现*chars的位置开始,截取右边的所有字符
${string%*chars}从字符串第一次出现*chars的位置开始,截取左边的所有字符
${string%%*chars}从字符出啊最后一次出现的*chars的位置开始,截取左边的所有字符

示例:

name="quiichicnkjdjdoaskajskjdoidj"
echo ${name:0:3}
echo ${name:2}
echo ${name:0-5:5}
echo ${name:0-2}
echo ${name#*chi}
echo ${name##*chi}
echo ${name%*chi}
echo ${name%%*chi}

测试:

[root@xueai8 shell]# sh demo6.sh
qui
iichicnkjdjdoaskajskjdoidj
doidj
dj
cnkjdjdoaskajskjdoidj
cnkjdjdoaskajskjdoidj
quiichicnkjdjdoaskajskjdoidj
quiichicnkjdjdoaskajskjdoidj

八、shell中表达式计算

1.使用expr外部表达式

示例:


r=`expr 4 + 5`
echo $r
j=`expr 4*5`
echo $j

~

测试:

[root@xueai8 shell]# sh demo7.sh
9
20

2.使用$((command))

示例:

r1=$((3 + 6))
echo $r1

测试:

[root@xueai8 shell]# sh demo7.sh
9

3.使用$[]

示例:

i=10
r2=$[$i+5]
echo $r2

测试:

[root@xueai8 shell]# sh demo7.sh
15

4.各种运算的写法

除法:
乘法:
余数:
乘幂:
实现:

#!/bin/bash
r1=`expr 40 / 5`
r2=$((40/5))
r3=$[40/5]
echo "r1=$r1"
echo "r2=$r2"
echo "r3=$r3"

# 乘法
r3=`expr 4 \* 5`
r4=$((4*5))
r5=$[4*5]
echo "r3=$r3"
echo "r4=$r4"
echo "r5=$r5"

#余数
r6=`expr 100 % 43`
r7=$((100%43))
r8=$[100%43]
echo "r6=$r6"
echo "r7=$r7"
echo "r8=$r8"

#乘幂
r9=$((2**3))
r10=$[2**3]
echo "r9=$r9"
echo "r10=$r10"
# expr没乘

测试:


[root@xueai8 shell]# sh demo8.sh
r1=8
r2=8
r3=8
r3=20
r4=20
r5=20
r6=14
r7=14
r8=14
r9=8
r10=8

4.使用let命令

let命令是bash中用于计算的工具

示例:


#!/bin/bash
n=10
let n=n+1
echo $n

let m=n*10
echo $m

let r=m/10
echo $r

let r1=m%7
echo $r

let a=m**2
echo $a

测试:

[root@xueai8 shell]# sh demo9.sh
11
110
11
11
12100

5.数字处理-bc计算器

  • bc工具的退出命令为quit
  • 精度设置对于除法有效,其他算法不一定有效,为了使精度设置生效,可在算式末尾以”/1”结束

示例:

[root@xueai8 shell]# echo 'scale=1;3/2'|bc
1.5

示例2:

#!/bin/bash
n=$(bc<<eof
 scale=2
 a=10
 b=20
 print 7/2
eof
)
echo $n


b=10
h=5
area=$(echo "scale=2;(1/2) * $b * $h"|bc)
echo $area


测试:

[root@xueai8 shell]# sh test1.sh
3.50
25.00
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值