shell入门
入门代码
#! /bin/bash #选择的解释器
echo "hello world" #输出
变量
#! /bin/bash
i=0; #错误写法 i = 0; 不要加空格
echo $i;#变量只有字符串类型,引用需要加 '$'
##常用系统变量
#HOME
#PWD 当前目录
#USER 当前用户
#SHELL 当前使用的解释器
readonly i=5; #只读变量
##特殊变量
$n #第几个参数
#! /bin/bash
echo $1 $2 $3
执行:./my.sh 1 2 3
结果:1 2 3
$# #用于循环,总参数的个数
#! /bin/bash
echo '$#'=$#
执行:./my.sh 1 2 3 4
结果:$#=4
$* #所有参数作为整体
$@ #所有参数分开来看
$? #上一个脚本的执行状态 0执行完
运算符
a=5
b=5
echo $[$a+$b] 或者 echo $(($a+$b)) 或者 expr $a + $b
条件判断
[ condition ] #注意前后有空格
a=5
b=5
[ $a = $b] #注意空格
echo $?
结果: 0 正常
b=6
echo $?
结果: 1 失败
比较数值
-eq #等于
-lt
-ne #不等于
-le
-ge
-gt #大于
查看权限
[ -w a.sh ] #查看a是否有执行权限
[ -f a.sh ] #查看文件是否存在
[ -d a.sh ] #查看文件夹是否存在
[ -e a.sh] #查看是否存在
流程控制
-
if
格式:
if [ 条件判断式 ] #注意if后面的空格 then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi #结束
例子:
#! /bin/bash if [ $1 -eq 1 ] then echo 11111 elif [ $1 -eq 2 ] then echo 22222 else echo 33333 fi #结束 执行:./a.sh 1 结果: 11111
#! /bin/bash #判断文件bbbb是否存在,不存在创建并且追加一个b作为内容 if [ -f bbbb ] then cat bbbb else touch bbbb echo b >> bbbb fi
-
case
case $1 in "1") echo 1111 ;; "2") echo 2222 ;; *) echo 3333 ;; esac
-
for
格式1:
for(( 初始值;循环控制条件;变量变化 )) do 程序 done
格式2:
for i in aaa bbb ccc #结合 $* $@使用 do echo $i done
例子
#!/bin/bash #累加1到100 s=0; for((i=1;i<=100;i++)) do s=$[ $s+$i] done echo $s
-
while
格式:
while [ 条件判断式 ] do 程序 done
例子
#! /bin/bash s=0; i=0; while [ $s -le 100] do s=$[ $s+$i ] i=$[ $i+1 ] done echo $s
read读取控制台输入
#! /bin/bash read -p "请在5秒以内输点东西: " -t 5 i #执行会,i会是控制台输入的值 echo $i -p #提示 -t #限制时间
函数
[ function ] 函数名[()] ##中括号内容可以省略,2选一省略 { Action; [return int;] #返回函数是成功还是失败的 $? 来获取 }
例子:
#! /bin/bash function aaa() { echo abcd } aaa #解释型语言,从上往下运行,所以函数必须先声明,后调用 ##带参数的函数,需要给用户提示参数个数 plus() { if [ $# -lt 2] ## $#参数个数 then echo "参数不足两个" exit fi echo [ $1 + $2 ] } plus 1 2 #调用
Shell工具
cut: 文件中负责剪数据
-
cut[选项参数] filename
-f 列号,提取第几列
-d 按指定分隔符分割列
-c 指定具体的字符(第几个)
-
用法:
## 想要: 192.168.100.194 ## 执行: ifconfig | grep Bcast ## 结果: inet 192.168.100.194 netmask 255.255.255.0 broadcast 192.168.100.255 ifconfig | grep Bcast | cut -d : -f 2 | cut -d " " -f 1 ## 结果: 192.168.100.194 #注意最后切割" " 会分成三段,第二段啥也没有 ifconfig | grep Bcast | cut -d : -f 2 | cut -c 2-8 ##取出第二个到第八个
sed
awk
sort
-