Linux笔记——Shell基础语法

一、Shell介绍

Shell 是一个用 C 语言编写的程序,它是一种命令行解释器,是用户使用 Linux 内核的桥梁。

  • Shell脚本程序以#!/bin/bash开头,/bin/bash是Linux中默认的Shell解释器程序
  • Shell语言不需要";"
  • 运行.sh文件需要有可执行权限,如果没有可执行权限,可以通过# sh 脚本路径的方式

二、简单输出

#!/bin/bash
echo "Hello World!" 

三、变量

(一)变量的声明
NAME="zhang san"
DT=`date +'%F'`
DT2=$(date)

注意:

  1. =左右不能有空格!!!
  2. 命名需规范,习惯使用大写,不能使用关键字和系统变量$PATH$USER等)。
  3. 双引号字符串能识别转义字符“\”和变量,单引号字符串不能。
  4. 使用反引号“ ` ”或者“$( )”可以将指令执行结果赋值给变量
  5. 使用关键字readonly可以将变量声明为只读变量,也叫静态变量。
(二)变量的使用

在变量名前增加$使用变量

#!/bin/bash
echo $NAME $DT
(三)变量的接收

使用read关键字从命令行接收输入,语法:
read [选项] [变量]
选项:-p: 提示文字,-t: 等待时间
变量:指定读取值的变量名

read -p '请输入:' INPUT
echo "您输入的为:$INPUT"
(四)变量的删除

使用unset关键字撤销变量

a=10
echo $A
unset A

注意:只读变量不能被unset

(五)设置环境变量

进入/etc/profile文件,使用export关键字声明环境变量,并使用source命令使配置文件生效。

(六)位置参数变量

执行Shell脚本时传递参数,#./test.sh a b c
则“$0”表示Shell命令,“$1”=a,“$2”=b,
“$*”表示所有参数作为一个整体,“$#”表示位置参数个数3

(七)预定义变量

Shell设计者已经定义好的变量,如:

变量名含义
$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID)
$?最后执行的命令的返回状态,0表示正确执行

四、运算符

(一)运算表达式

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,Shell语言有三种表达式形式,分别是:
\$[m+n]\$((m+n))expr m + n

  • 表达式1:(推荐)
#!/bin/bash
RESULT=$[(1+2)*3]
echo $RESULT
  • 表达式2:(注意小括号个数)
#!/bin/bash
RESULT=$(((1+2)*3))
echo $RESULT
  • 表达式3:(expression)
#!/bin/bash
TEMP=`expr 1 + 2`
RESULT=`expr $TEMP \* 3`
echo $RESULT

注意:

  1. expr后面的参数间要有空格,否则报参数数目错误
  2. 乘法运算符要用转义字符\*
  3. 反引号的使用
(二)算术表达式

常见的算术表达式有:

运算符说明
+加法
-减法
*乘法
/除法
%取余
=赋值
==相等。用于比较两个数字,相同则返回 true(真)。
!=不相等。用于比较两个数字,不相同则返回 true。

注意:==等条件运算符左右要有空格

(三)关系表达式

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。常见的关系表达式有:

运算符说明
-eqequal,检测两个数是否相等,相等返回 true。
-nenot equal,检测两个数是否相等,不相等返回 true。
-gtgreat than,检测左边的数是否大于右边的,如果是,则返回 true。
-ltless than,检测左边的数是否小于右边的,如果是,则返回 true。
-gegreat than or equal,检测左边的数是否大于等于右边的,如果是,则返回 true。
-leless than or equal,检测左边的数是否小于等于右边的,如果是,则返回 true。
(四)逻辑表达式

也就布尔表达式,Shell常用的逻辑表达式有:

运算符说明
!非运算,表达式为 true 则返回 false,否则返回 true。
-o或运算,有一个表达式为 true 则返回 true。
-a与运算,两个表达式都为 true 才返回 true。
(五)字符串运算符
运算符说明
=检测两个字符串是否相等,相等返回 true。
!=检测两个字符串是否相等,不相等返回 true。
-z检测字符串长度是否为0,为0返回 true。
-n检测字符串长度是否为0,不为0返回 true。
str检测字符串是否为空,不为空返回 true。
(六)文件测试运算符
操作符说明
-b file检测文件是否是块设备文件,如果是,则返回 true。
-c file检测文件是否是字符设备文件,如果是,则返回 true。
-d file检测文件是否是目录,如果是,则返回 true。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file检测文件是否是有名管道,如果是,则返回 true。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file检测文件是否可读,如果是,则返回 true。
-w file检测文件是否可写,如果是,则返回 true。
-x file检测文件是否可执行,如果是,则返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。

五、流程控制

(一)if条件判断语句

语法:

if [ condition1 ]
then
    command1
elif [ condition2 ]
then 
    command2
else
    commandN
fi

注意:condition左右要有空格!

(二)case语句

语法:

case $变量名 in
	模式1)
		命令序列1
	;;
	模式2)
		命令序列2
	;; 
	*)
		默认执行的命令序列
	;; 
esac 

案例:判断字符

#!/bin/bash
read -p "press some key ,then press return :" KEY
case $KEY in
	[a-z]|[A-Z])
		echo "It's a letter."
	;;
	[0-9]) 
		echo "It's a digit."
	;;
	*)
		echo "It's function keys、Spacebar or other ksys."
esac

案例:判断系统

 #!/bin/sh

 SYSTEM=`uname -s`

 case $SYSTEM in
     Linux)
         echo "My system is Linux"
         echo "Do Linux stuff here..."
     ;;
     FreeBSD)
         echo "My system is FreeBSD"
         echo "Do FreeBSD stuff here..."
     ;;
     *)
         echo "Unknown system : $SYSTEM"
         echo "I don't what to do..."
     ;;
 esac
(三)for循环

Shell的for循环有两种语法格式
语法1:

for 变量名 in 列表
do
	循环体
done

列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start…end} 如:{1…10}
(b) $(seq [start [step]] end) 如:$(seq 1 2 100) 表示1-100之间的所有奇数
(3) 返回列表的命令 $(COMMAND) 如:for i in `ls /etc`
(4) 使用glob,如:*.sh
(5) 变量引用;$@, $*
语法2:

for ((初始值;循环控制条件;变量变化))
do
	循环体
done
(四)while循环
while [ 条件判断式 ]
do
	循环体
done

六、函数

(一)basename和dirname函数

basename函数
根据完整路径,得到文件名
例如:

basename /root/test.txt
# 输出:test.txt

basename /root/test.txt .txt
# 输出:test

dirname函数
根据完整路径,得到目录
例如:

dirname /root/test.txt
# 输出:/root

注意:basename和dirname都是系统函数,可以直接在命令行使用。

(二)自定义函数

Shell的一个.sh文件可以理解为一个命令,函数也可以理解为是一个命令,Shell中自定义函数的语法为:

[ function ] funname [()]{

    action;
    [return int;]
}

声明和调用一个求和函数的实例:

#!/bin/bash
function getSum(){
	SUM=$[$a + $b]
	echo "和为: $SUM"
}
read -p "输入a:" a
read -p "输入b:" b
#调用函数
getSum $a $b

注意:

  1. Shell自定义函数可以不需要声明形参
  2. Shell是解释型语言,函数要先定义再调用
  3. 如果不加return,将以最后一条命令运行结果作为返回值。 return后跟数值n(0-255)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值