Alan Hou的个人博客

Linux Shell脚本相关知识

一、Vim相关

vim的配置文件/etc/vimrc

常用设置:

syntax on    高亮显示(syntax off)

set number 添加行号(set nonumber)

set autoindent 自动缩进(也可以是更严格的set cindent)

二、Shell相关

shell文件前通常加入#!/bin/bash,echo -n在输出时不换行

1.Shell命令路径环境变量设置文件

全局:

/etc/profile
/etc/profile.d/*
/etc/bashrc

个人:
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile

在命令行输入set可查看所有的环境变量

定义变量如var1=value1,等号两边不可以加空格,变量名为20个字符以内的数字、字母和下划线组成

相用另一个语句的输出值有两种方式,如:

var1=<code>date</code>
var2=$(date)

stdin输入(<,<<)、stdout输出(>,>>) 关闭>输出set -C,开启set +C或使用>|

stderr错误输出 2>, 2>>

不论正确或错误均输出到文件中 > filename 2> &1 或直接使用 &>

管道命令 |

数学运算:

expr 5 + 4
expr 5 \* 4 #*同时是通配符,需转义

赋值时还可以使用

var1=$[5 * 4] #此处无需转义

Shell运算原生通常仅支持整数,对浮点数的支持存在问题,如需shell处理小数,可以尝试z shell(zsh)

假如不使用z shell,也可以使用管道命令加bc来进行浮点数的计算(如若系统未内置bc请自行安装),如

var1=$(echo "scale=4; 3.44 / 5" | bc) #scale用于设定精确到几位小数

使用bc可还可以用行内赋值的方法,其中EOF为自定义开始结束符,中间包含计算的语句

 variable=$(bc <<EOF
 options
 statements
 expressions
 EOF
 )

shell中可在最后加上echo $?返回执行状态,如0为Successful completion of the command,127为Command not found,也可通过exit指令指定返回码,但是请注意返回码不能超过255

VAR1=${VAR2:-word}如果VAR2变量有值则赋值为VAR2,否则赋值为word,其中的冒号可省略

2.命令行输出带颜色文字

echo -e "\e[1;31m hello \e[33m"

\e为开始和结束,1;表示加粗显示(不加粗可改为0;或直接不写),31m为输出文字颜色,33m为结束输出颜色,m前的数字变化表示不同的颜色,如0m为黑色(不写后面\e这段可以使用$(tput sgr0),有重置终端颜色的作用),如上面的命令执行效果如下:

3.关联数组申明和赋值

declare -A array
array[index]=…

4.结构化语句
if-then

if command1
then
  commands
elif command2
then
  commands
else
  commands
fi

if command也可以使用if test command或if [ command ]

在shell中作比较可使用eq, ge, gt, le, lt, ne来判断是否等于、大于等于等等,如n1 -lt n2,若n1小于等于n2则返回true

而进行数值比较和运算时通常会使用两个小括号,如if (( val1 ** 2 > val2 )),这里的** 2表示2次方;而进行字符比较或匹配时可使用两个中括号,if [[ $USER == r* ]]
case语句

case variable in
pattern1 | pattern2) commands1;; 
pattern3) commands2;;
*) default commands;;
esac

for语句

for var in list 
do
	commands
done

for语句中的list通常以空格来进行分隔,实际应用中可以通过双引号来标识带空格的词组为一个单元。通过在代码中设置IFS也可暂时更改分隔符,如

IFS=$'\n'

for循环还可以接受for (( a = 1; a < 10; a++ ))这种类似于其它编程语言的格式
while语句

while test command 
do
      other commands
done

until语句

until test commands 
do
        other commands
done

文件目录判断语句

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
-O filename 如果是文件的所有者,则为真
-G filename 如果与文件同属一个组,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真
filename1 -ot filename2 如果 filename1比 filename2旧,则为真

 

脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为”1 2 3″(一起被引号包住)
$@为”1″ “2” “3”(分别被包住)
$#为3(参数数量)

退出移动版