This is my study note of shell.
常见问题解决方式
1 2 3
| 1.正常定义数组报错Syntax error: "(" unexpected 解决方案:若此时语法不存在错误,则应该是缺少!/bin/bash,或者调用sh时是调用dash而不是bash,此时通过ll /bin/**sh可以查看。 此时只需要对.sh文件+x权限,同时通过./sh文件名直接运行文件就可以解决这个问题。
|
shell驱动基本语法
环境变量
1 2 3 4 5 6 7 8 9 10 11 12
| PATH 命令所示路径,以冒号为分割; HOME 打印用户家目录; SHELL 显示当前Shell类型; USER 打印当前用户名; ID 打印当前用户id信息; PWD 显示当前所在路径; TERM 打印当前终端类型; HOSTNAME 显示当前主机名; PS1 定义主机命令提示符的; HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间; RANDOM 随机生成一个 0 至 32767 的整数; HOSTNAME 主机名
|
系统变量
1 2 3 4 5 6
| $0 当前脚本的名称; $n 当前脚本的第n个参数,n=1,2,…9; $* 当前脚本的所有参数(不包括程序本身); $# 当前脚本的参数个数(不包括程序本身); $? 令或程序执行完后的状态,返回0表示执行成功; $$ 程序本身的PID号。
|
参数定义
1 2 3 4 5 6
| # 等号两边不可以有空格,同时想要调用变量的话使用“$”,否则会当作字符串处理 a=10 echo $a # 定义数组 a=(0 1 10 1) echo ${a[0]}
|
输入参数
1 2 3 4
| read 变量 read -p "描述" 变量 #例: read -p "this is a test" a # echo $a
|
命令输入
1 2 3 4 5
| # 第一种,直接使用 echo 1 # 第二种,赋值给变量 num = `echo 1` $num
|
echo彩色输出
1 2
| echo -e "\033[42;32m hello wordl \033[0m" # 47表示底色,32m表示文字颜色
|
if
1 2 3 4 5 6 7 8 9 10
| # 注意此时[]两侧必须有空格隔开,同时用“==”判断时,“==”两边也要用空格隔开 if [ a -eq 10 ]; then # 错误用例:if[a==10]; then 正确:if [ a == 10 ]; then ... elif ... else ... fi
|
while
1 2 3 4
| while(condition) do ... done
|
for
1 2 3 4
| for i in range(sed 1 10) do ... done
|
case
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| case 变量 in conditon 1) ... ;;
condition 2) ... ;; condition 3) ... ;; esac
|
select
1 2 3 4
| select i in http http1 http2 do ... done
|
自启动
- ls /lib/systemd/system
- gedit rc-local.service
- sudo chmod 777 /lib/systemd/system/rc-local.service
- rc-local.service文末添加
1 2 3
| [Install] WantedBy=multi-user.target Alias=rc-local.service
|
- 查看系统中有无 /etc/rc.local 这个文件,没有则自己创建一个,并将需要使用的脚本放进去
1
| 如果在 /etc/rc.local 中添加的是 ./test.sh 这种类型的,要在末尾加上&,即./test.sh&
|
- rc.local加权限 sudo chmod +x /etc/rc.local
- 创建软链接
1
| sudo ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
|
- reboot
- 查看 /usr/local是否生成test.log