文章目录
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的简单使用。