shell基础知识01



一、不能浅尝辄止

1.1、shell的简介

1.1.1、
shell脚本通常是一个#!开始的文本文件,linux环境下的任何脚本语言,都是以#!的特殊行开始的。#!置于解释器之前。
1.1.2、如何运行shell脚本
方式1:脚本做为sh命令的参数,格式:sh 脚本路径
# vi echo.sh
#!/bin/bash
echo "i am the first script!"
# sh echo.sh
echo "i am the first script!"
此时执行如下命令,报错:权限不够,采用第二种方法
# ./echo.sh
-bash: ./echo.sh: 权限不够


方式2:脚本做为可执行文件
# chmod a+x ./echo.sh  ##赋予可执行权限
# ./echo.sh  ##./表示当前目录
i am the first script!

1.2、终端打印文本和变量

终端是一个交互式工具,用于终端打印的基本命令:echo、printf
1.2.1、echo
注意:(1)默认情况下,echo执行后会添加一个换行符
(2)echo命令行打印时,""、''等包含文本时,各有各的特殊用途和副作用
使用""包含文本--
使用""打印!号时会报错:event not found,需要在echo之前使用set +H或者直接使用脚本,以便正常显示!

# echo "hello world!"
-bash: !": event not found
# set +H  ##使用set命令打开允许使用!,或者set +o histexpand
# echo "hello world!"
hello world!
# set -o histexpand  ##使用set命令关闭使用!
# echo "hello world!"  
-bash: !": event not found

使用''包含文本--
注意:
使用''不会计算单引号中的变量,所以最好使用""

# export var=linux
# echo 'var=$var'
var=$var
# echo "var=$var"
var=linux
# echo "var="$var""
var=linux

1.2.2、printf
printf后使用引用文本或由空格分隔的参数,它可以格式化字符串,如字符串宽度、左右对齐方式等
注意:
(1)printf不会自动添加换行符,必须需要换行时手动添加\n

# printf "hello world";
hello world[root@serverp61961404140108 ~]# 
# printf "hello world\n";
hello world

printf格式化字符串--

1.3、玩转变量和环境变量

1.3.1、预备知识

在bash中,每一个变量的值都是字符串,无论给变量赋值时有没有使用引号都会以字符串的形式储存。

查看每个进程运行时使用的环境变量-
# pgrep rad
12403
12406
# cat /proc/12406/environ

#每个环境变量使用null(\0)分隔,使用\n分隔,使得每行显示一对variable=value
# cat /proc/12406/environ |tr '\0' '\n'  ##发现linux用着太强大了

1.3.2、实战演练

1、变量赋值
var=value
(1)如果value不包含任何空白字符(空格等),那么它不需要引号进行引用,反而,必须使用引号或者单引号
(2)var=value是赋值操作;var = value是相等操作
(3)打印变量时,使用 $var、${var}
# count=5
# fruit=apple
# echo "we have $count ${fruit}(s)"
we have 5 apple(s)

2、环境变量
环境变量:是未在当前进程中定义,而是从父进程继承而来的变量
(1)export设置环境变量,此后,从当前shell执行的程序都会继承这个变量
(2)默认情况下,很多标准环境变量以供shell使用,例如PATH、HOME、USER等
$PATH通常定义在/etc/environment、/etc/profile/、~/bashrc中

如果需要在PATH中临时加入一条新路径,可以使用如下方式-
(1)export PATH="$PATH:/home/usr/bin"
(2)PATH="$PATH:/home/usr/bin"  export PATH

3、补充知识
3.1、获得字符串长度
# echo ${#PATH}
165

3.2、识别当前shell版本
# echo $SHELL
/bin/bash

# echo $0
-bash

3.3、判断是否是超级用户
UID环境变量,只有取值为0时,才是超级用户(root),非0就是普通用户
方法1-
# vi isroot.sh
#!/bin/bash

if [ $UID -ne 0 ]; then  ##]直接加分号
        echo "you are not a root user!"
else
        echo "welcome!root!"
fi

# chmod a+x ./isroot.sh 
方法2- 
# id
uid=0(root) gid=0(root) 组=0(root)
方法3-
# cat /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# cat /etc/passwd |grep ^root
root:x:0:0:root:/root:/bin/bash

3.4、修改bash提示字符串
默认的是username@hostname ~,可以使用PS1环境变量定制提示文本,默认的shell提示文本在~/.bashrc的某一行设置

chroot是在unix系统的一个操作,用于对当前的程序和它的子进程改变真实的磁盘根目录
# vi /etc/bashrc

# su - oracle
[oracle@serverp61961404140108 ~]$ 
$ cat ~/.bashrc |grep PS1
null
$ vi ~/.bashrc
# .bashrc

# Source global definitions
##if [ -f /etc/bashrc ]; then
##        . /etc/bashrc
##fi

# User specific aliases and functions
PS1=`\u@\h:\w\$`
~
$ source ~/.bashrc
-bash: u@h:w$: command not found

1.4、通过shell进行数学运算

1.4.2、实战演练
使用普通变量定义数值,它会被存储为字符串,可以使用一些方法使它像数字一样被处理

1、只能用于整数运算,不支持浮点数
let命令可以直接执行基本的算术操作-
(1)使用let操作时,变量名前不再需要$


# vi calc.sh
#!/bin/bash
num1=4;
num2=5;
let result=num1+num2;
echo "num1+num2=$result"

# chmod a+x ./calc.sh 
# ./calc.sh 
num1+num2=9

操作符[]-
(1)
# vi calc.sh
#!/bin/bash
num1=4;
num2=5;
let result=num1+num2;
echo "num1+num2=$result"

num3=6;
num4=7;
result=$[ num1+num2 ];
echo "num3+num4=$result"

# ./calc.sh 
num1+num2=9
num3+num4=13

expr-
(1)+号两边必须有空格
(2)变量名前必须加$前缀

##输出num5+num6=num5+num6
num5=8;
num6=9;
result=`expr num5+num6`;
echo "num5+num6=$result"  

# vi calc.sh 
#!/bin/bash
num1=4;
num2=5;
let result=num1+num2;
echo "num1+num2=$result"

num3=6;
num4=7;
result=$[ num3+num4 ];
echo "num3+num4=$result"


num5=8;
num6=9;
result=`expr $num5+$num6`;
echo "num5+num6=$result"

# ./calc.sh 
num1+num2=9
num3+num4=13
num5+num6=8+9

##把result=`expr $num5+$num6`修改为result=`expr $num5 + $num6`就可以计算数值了,原来+号两边必须有空格

2、bc进行浮点运算
# vi ./calc.sh
#!/bin/bash
num1=4;
num2=5;
let result=num1+num2;
echo "num1+num2=$result"


num3=6;
num4=7;
result=$[ num3+num4 ];
echo "num3+num4=$result"


num5=8;
num6=9;
result=`expr $num5 + $num6`;
echo "num5+num6=$result"


num7=1.5;
num8=1.6;
result=`echo $num7*$num8 |bc`;
result1=`$num7*$num8 |bc`  ##20行
result2=`echo "$num7*$num8" |bc` 
echo "result=$result result1=$result1 result2=$result2"


# ./calc.sh   ##不难理解其错误
num1+num2=9
num3+num4=13
num5+num6=17
./calc.sh: line 20: 1.5*1.6: command not found
result=2.4 result1= result2=2.4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值