变量定义、输出
foo=bar
echo $foo
echo ${foo}
echo ${foo}barbarbar
使用$()执行命令
# echo $(command)
echo $(pwd)
foo=$(pwd)
echo $foo
使用特殊变量
echo $? # 输出问题
$0 # 文件名
$1 to $9 # 脚本参数
$# # 参数个数
$? # 方法返回值,0代表正常
$@ # 所有的参数
$HOME # 用户目录
$$ # 进程ID(PID)
!! # 最后一个命令,包含参数
$_ # 最后一个命令的最后一个参数
$PATH # 环境变量
字符串
# 单引号和双引号的区别
echo "value of foo is $foo"
echo 'value of foo is $foo'
# 连接
str1=1
str2=2
str3=$str1$str2
echo str3 # 12
# 长度
${#string}
# substring
${string:begin:end}
printf
# 和 C 语言的printf不同点
- 无()
- 使用空格分割参数
printf "%s %s\n" 1 2 3 4
条件语句
if [condition]; then
...
elif [condition]; then
...
else
...
fi
# conditions
-eq ==
-ne !=
-gt >
-lt <
-ge >=
-le <=
# other
= == for string
!= != for sring
-z 字符串是否为空
-f/-d 是否是文件/是否是目录
-r/-w/-x 检查权限
-e 文件/目录 是否存在
循环
# while
while [ condition ]; do
...
done
# break continue可以用
# 示例1
for i in 1 2 3 4 5; do
echo $i
done
# 示例2
for i in {1..5}; do
echo $i
done
# 示例3
for (( i = 1; i <= 5; i++ )); done
echo $i
done
枚举
# {}枚举
{,2,10}枚举 '', '2', '10'
{a..c}枚举 a b c
echo {1..100}
shell 例子
echo "String program at $(date)"echo "Running program $0 with $# arguments with pid $$"for file in "$@"; do grep foobar "$file" > /dev/null 2> /dev/null if [ $? -ne 0 ]; then echo "File $file does not hava any foobar, adding one" echo "# forbar" >> "$file" fi done
2> /dev/null
含义
执行shell脚本
# 方法一bash script.sh# 方法二chomd +x script.sh # 获得运行权限(如果没有运行权限的话)#!/bin/bash # 脚本开头必须有./script.sh# 方法三source script.sh # . script.sh相同功能my_func # 直接执行函数名
shell脚本检查
shellcheck script.sh
简单shell脚本
################################vim my_func.shmkcd() { mkdir -p "$1" cd "$1"}source my_func.shmkcd test################################for foo in hello worlddo echo $foodone##################可以控制键盘灯的有趣功能######################cd /sys/class/leds/input1::capslocksudo echo 1 > brightness # 失败 sudo 1 | sudo tee brightness # 成功