编写运行第一个shell脚本
CentOS 預設使用者家目錄下的 ~/bin 目錄會被設定到 ${PATH} 內,因此放在家目录的bin(自己新建)执行起来会比较方便,
在该目录下新建hello.sh 输入以下内容并保存
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
随后输入shell hello.sh 或者sh hello.sh 又或者输入路径加文件名(此时hello.sh必须有rx权限) 即可看到输出的hello world
第一行声明所使用shell目录(叫shebang),第二三行设定环境变量 第四行输出helloworld 最后一行结束返回0,可以在执行上述脚本后输入 $? 查看返回值。
若脚本作为shell的参数执行(前两种),则第一行的声明就没用了。
看看echo
echo hello
echo "hello"
echo 'hello'
均可以打印出hello,但是有一些细微的区别,第一种不能打分号输出,因为分号会被认为是命令的分隔符。第二种不能直接输出叹号,需要 \ 转义,单引号时,若加在变量两边,变量不会被输出其值,只会当成字符输出。
printf命令也可以输出字符,printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564
输出结果:3 Jeff 77.56 -代表左对齐,不打这个就是右对齐,5为字符所占空间,4.2的.2为小数点后显示2位,与c的printf函数有些类似。
echo参数的使用 echo -n 可以去掉输出后自带的换行,echo -e 可以使后跟双引号的内容里的转义字符(如\t)生效。
利用echo修改字符界面字体颜色:echo -e “\e[1;COLORm” COLOR填需要改的颜色值,部分如下:
字体颜色:reset=0, black=30, red=31, green=32, yellow=33, blue=34, magenta=35, cyan=36, and white=37.
背景颜色:reset = 0, black = 40, red = 41, green = 42, yellow = 43, blue = 44, magenta = 45, cyan = 46, and white=47
关于变量
环境变量
env显示所有终端相关环境变量,/proc/PID号/environ 查看指定进程的相关环境变量
pgrep+进程名 可得其PID号,如pgrep bash
将环境变量换行输出:cat /proc/2213/environ | tr '\0' '\n'
修改环境变量
export PATH="$PATH:/home/user/bin"
关于export:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。
变量赋值,例子如下
#!/bin/bash
fruit=apple
count=5
echo "We have $count ${fruit}(s)"
The output is as follows:
We have 5 apple(s)
注意=两边不能有空格,带大括号和不带的两种引用方法均可以
获得字符串长度:${#var} 此处大括号不能省
echo $SHELL 显示当前SHELL位置
基本数学运算
直接赋值的变量都是被当成字符串存储的,但是可以另加一些命令将其作为数字来运算,主要有let和[ ]、(())等,实例如下
#!/bin/bash
no1=1
no2=2
let result=no1+no2
printf "result:%s\n" $result
let no1++
let no2--
let no1-=1
let no2+=1
#equals to result=$[no1+no2]
result=$((no1+no2))
printf "result:%s\n" $result
result=$[ $no1 + 5 ]
result=$(( no1 + 5 ))
注意二者的区别,一个no1前有$,一个没有。另外还有expr 略过
以上只能用于整型,浮点数操作下面讲
输出为30.0
注意这里 ` 不是单引号,叫倒引号,作用是将里面内容当成指令执行而不是字符串
制定输出的精度:
echo "scale=2;3/8" | bc
输出:0.37
P18 待续