Shell


Shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。


HelloWorld

创建一个helloworld.sh文件

#!/bin/bash
echo "hello world"

sh或者bash helloworld.sh运行。

多命令处理

#!/bin/bash
cd /home/yao
touch banzhang.txt
echo "zhuijia neirong" >> banzhang.txt

常用系统变量:

$HOME$PWD$SHELL$USER

自定义变量:

  • 规则:不能以数字开头,等号两侧不能有空格。变量默认都是字符串,无法进行数值运算,如果有空格需要双引号或者单引号括起来。
  • 定义变量:变量=值。
  • 撤销变量:unset 变量。
  • 声明静态变量: readonly 变量=值,不能unset。
  • 可把变量提升为全局环境变量export,可供其他shell程序使用。
A=1
echo $A
1
unset A
export A

特殊变量

$n

  • 基本语法:n为数字,$0表示脚本名称,$1-9表示第一到第九个参数,十个以上参数需要用大括号${10}。

类似于带参方法。

先touch parameter.sh

#!/bin/bash
echo "$0 $1 $2 $3"
bash parameter.sh 入参1 入参2 入参3
parameter.sh 入参1 入参2 入参3

$#

  • 基本语法:$# 获取所有输入参数的个数,常用于循环

$ *、$ @

  • 基本语法:$* 代表命令行中所有的参数。
  • $@ 也代表命令行中所有的参数,不过每个参数区别对待。

$ ?

  • 基本语法:$? 表示最后一次执行的linux命令的返回状态,0则表示正确执行,非0则表示失败。

运算符

  • 基本语法:$((运算式)) 或者 $[运算式]。
  • expr +,-,\*, /, %运算符两侧需要空格expr 1 + 1。
s=$[(2+3)*4]
echo $s
20

expr `expr 2 + 3` \* 4
20

条件判断

  • 基本语法:[ condition ] condition前后要有空格。
  • 常用:
  • 比较字符串 -lt小于 -le小于等于 -eq等于 -gt 大于 -ge 大于等于 -ne不等于。
  • 判断文件权限: -r 读 -w写 -x执行。
  • 判断文件类型: -f文件 -e文件存在 -d目录且存在。
[23 -ge 22] 
-bash: [23: command not found
必须在[]两边空格

[ 23 -gt 22 ]
echo $? 结合$?判断是否正确
0

[ -w parameter.sh ]
echo $?
0

流程控制

if判断

  • 基本语法:
if[ 条件判断 ];then  (注意空格)
	程序
fi
或者
if[ 条件判断 ]
	then
		程序
fi
#!/bin/bash
if [ $1 -eq 1 ];then
	echo "参数为1"
elif [ $1 -eq 2 ]
then
	echo "参数为2"
fi

bash if.sh 1
参数为1

case语句

  • 基本语法:
case $变量名 in 
	"值 1")
		输出1
	;;
	"值 2")
		输出2
	;;
	*)
		default
	;;
esac
#!/bin/bash
case $1 in
1)
	echo "入参为1"
;;
2)
	echo "入参为2"
;;
*) 
	echo "无法识别"
;;
esac

bash case.sh 3
无法识别

for循环

  • 基本语法:
for((初始值;循环条件;变量变化))
	do
		程序
	done
	
for 变量 in 值 1 值 2 值3 ...
	do
		程序
	done
#!/bin/bash
s=0
for((i=1;i<=5;i++))
do
	s=$[$s+$i]
done
echo $s

#!/bin/bash
for i in $*
do
	echo "输出 $i"
done
bash for2.sh 1 2 3
输出 1
输出 2
输出 3

$* 和 $@区别

bash for2.sh 1 2 3
输出 1
输出 2
输出 3
@输出 1
@输出 2
@输出 3

#!/bin/bash
for i in "$*" 加上引号后看作整体
do
	echo "输出 $i"
done

for j in "$@"
do
	echo "@输出 $j"
done

bash for2.sh 1 2 3
输出 1 2 3
@输出 1
@输出 2
@输出 3

while循环

  • 基本语法:
while [ 条件判断 ]
do
	程序
done
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
	s=$[$s+$i]
	i=$[$i+1]
done

echo $s

bash while.sh 
5050

read读取控制台输入

  • 基本语法:
read(选项)(参数)
选项:
	-p: 指定读取值时的提示符;
	-t:指定读取值时等待的时间(秒);
参数:
	变量: 指定读取值的变量名;
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

bash read.sh 
Enter your name in 7 seconds rwx
rwx

函数

系统函数

  • basename基本语法
basename [String / pathname] [suffix] 
basename命令会删掉所有的前缀和后缀
basename /home/yao/banzhang.txt
banzhang.txt
basename /home/yao/banzhang.txt .txt
banzhang
  • dirname基本语法
  • 文件绝对路径
dirname $PWD
/home/yao

自定义函数

  • 基本语法:函数需要放在上面
[ funciton ] funname[()]
{
	Aciton;
	[return int;]
}
funname
#!/bin/bash
function sum()
{
	s=0;
	s=$[$1+$2]
	echo $s
}
read -p "input your paratemer1:" p1
read -p "input your paratemer2:" p2

sum $p1 $p2

 bash sum.sh 
input your paratemer1:1
input your paratemer2:2
3

Shell工具

cut

  • 基本用法: cut[选项参数] filename
  • 选项参数:-f 列号 -d分隔符默认制表符
cat cut.txt 
dong shen
guan zhen
wo wo
lai	lai
le le

cut -d " " -f 1 cut.txt 
dong
guan
wo
lai	lai
le

cat cut.txt | grep guan | cut -d " " -f 1
guan

echo $PATH | cut -d : -f3
/usr/sbin

sed

  • 基本用法:sed[选项参数] ‘命令’ filename。
  • 选项参数: -e 执行多个。
  • 命令: a 新增 d 删除 s 查找并替换。
sed "2a mei nv" sed.txt 
dong shen
guan zhen
mei nv
wo  wo
lai  lai

le  le

sed '/wo/d' sed.txt
sed 's/wo/ni/g' sed.txt 
sed -e "2d" -e "s/wo/ni/g" sed.txt

awk

  • 基本用法:awk[选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
  • pattern: 表示awk在数据中查找的内容。
  • action:表示执行命令。
  • 选项参数: -F 指定输入文件拆分隔符。-v 赋值一个用户定义变量。
awk -F : '/^root/{print $7}' passwd

sort

  • 基本语法:sort(选项)(参数)
  • 选项:-n 按照数值大小排序 -r 以相反的顺序来排序 -t 设置排序分隔符 -k 指定排序列。
sort -t : -nrk 2 sort.sh 
xz:50:2.3
bb:40:5.4
ss:30:1.6
bd:20:4.2
cls:10:3.5

总结

Shell的简单使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值